Ubuntu 下 VLC 无法启动(Segmentation fault)终极解决方案

目录

Ubuntu 下 VLC 无法启动(Segmentation fault)终极解决方案

------Intel Alder Lake-P / Iris Xe + Snap VLC 的隐藏大坑

在 Ubuntu Desktop 上启动 VLC 时,报错信息如下:

bash 复制代码
Driver does not support the 0x46a6 PCI ID.
libGL error: failed to create dri screen
libGL error: failed to load driver: iris
VLC media player 3.0.20 Vetinari (revision 3.0.20-1-g2617de71b6)
[00006053694bda00] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
Fontconfig warning: FcPattern object width does not accept value [75 100)
Segmentation fault (core dumped)

这大概率是踩中了 Intel Iris Xe + Snap VLC + 老版本 Mesa 的组合大坑。


一、问题现象

通过 Ubuntu 自带的应用商店(官网也挂着商店链接)无论是点击图标还是终端执行 vlc,都会出现:

  • 桌面点击 VLC 无反应或闪退
  • 终端启动直接 Segmentation fault
  • 日志中出现 Driver does not support the 0x46a6 PCI ID

二、运行环境(典型触发条件)

  • Ubuntu Desktop:22.04 / 24.04 / 25.10 均可能
  • CPU / GPU
    Intel Alder Lake-P GT2(Iris Xe Graphics)
    PCI ID:0x46a6
  • VLC 版本:3.0.20(Ubuntu 默认)

确认显卡:

bash 复制代码
lspci | grep -i vga

# 输出如下:
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-P GT2 [Iris Xe Graphics] (rev 0c)

三、错误信息解读:关键在这一句

text 复制代码
Driver does not support the 0x46a6 PCI ID

这句话的含义非常明确:

  • VLC 在初始化 OpenGL
  • 调用的是 Mesa / libGL
  • 但当前 Mesa 版本 不认识 Alder Lake-P(0x46a6)
  • 导致 OpenGL 初始化失败
  • VLC 在 GUI 初始化阶段直接崩溃

四、为什么升级 Mesa 也没用?

尝试升级 Mesa :

bash 复制代码
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt upgrade

升级后系统 Mesa 确实变新了,但 VLC 依旧崩溃

原因非常隐蔽:

升级的是系统 Mesa,但 VLC 用的不是系统 Mesa。


五、真正的根因:Snap 版 VLC 自带"老 Mesa"

Ubuntu 默认安装 VLC 的方式是:

text 复制代码
/snap/bin/vlc

Snap 的特点是:

每个应用自带独立运行时(包括 Mesa / libGL)

与系统 Mesa 完全隔离

这意味着:

组件 使用的 Mesa
系统(升级的) ✔ 新 Mesa
Snap VLC(沙盒内) ❌ 老 Mesa(不支持 0x46a6)

所以:

  • 无论怎么升级系统 Mesa
  • Snap VLC 仍然使用它自己的老版本 Mesa
  • 仍然不支持 Alder Lake-P
  • 仍然 Segfault

确认是否在用 Snap 版:

bash 复制代码
which vlc

如果输出:

text 复制代码
/snap/bin/vlc

那问题就找到了。


六、正确解决方案(核心)

卸载 Snap 版 VLC → 安装 APT 版 VLC → 使用系统 Mesa

1. 移除 Snap VLC

bash 复制代码
sudo snap remove vlc

确认已删除:

bash 复制代码
snap list | grep vlc

2. 安装 APT 版 VLC

官网也提供了命令:

bash 复制代码
sudo apt update
sudo apt install vlc

确认路径:

bash 复制代码
which vlc

应为:

text 复制代码
/usr/bin/vlc

3. 首次启动(可选)

bash 复制代码
QT_QPA_PLATFORM=xcb vlc --avcodec-hw=none --vout=x11

此时 VLC 应能正常打开 GUI。


七、一个常见小坑:bash 路径缓存

如果卸载 Snap 后执行:

text 复制代码
bash: /snap/bin/vlc: No such file or directory

这是因为 bash 缓存了旧路径。

清除缓存:

bash 复制代码
hash -r

或直接重开终端。


八、最终验证

bash 复制代码
which vlc
# /usr/bin/vlc

vlc
# GUI 正常启动,无崩溃

错误全部消失:

  • ❌ Driver does not support the 0x46a6 PCI ID
  • ❌ libGL error
  • ❌ Segmentation fault

九、原理总结(一句话版)

Snap VLC 使用的是"自带的老 Mesa",APT VLC 使用的是"系统的 Mesa",而 Alder Lake-P 只在较新的 Mesa 中被支持。

相关推荐
松涛和鸣3 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
Anesthesia丶4 小时前
Ubuntu20.04 升级 Ubuntu24.04 LTS
ubuntu
简单中的复杂4 小时前
【避坑指南】RK3576 Linux SDK 编译:解决 Buildroot 卡死在 host-gcc-final 的终极方案
linux·嵌入式硬件
wVelpro4 小时前
如何在Pycharm 2025.3 版本实现虚拟环境“Make available to all projects”
linux·ide·pycharm
程序员老舅5 小时前
C++高并发精髓:无锁队列深度解析
linux·c++·内存管理·c/c++·原子操作·无锁队列
雨中风华5 小时前
Linux, macOS系统实现远程目录访问(等同于windows平台xFsRedir软件的目录重定向)
linux·windows·macos
爱吃生蚝的于勒6 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森6 小时前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
翼龙云_cloud6 小时前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云