27 - 硬件驱动大全与视频多媒体
Linux 的硬件驱动生态经过多年发展已经相当成熟,大部分硬件可以开箱即用。本章将系统性地介绍 Arch Linux 下各类硬件驱动的安装、配置与故障排除,同时深入讲解视频硬件加速与多媒体优化,帮助你充分发挥硬件性能。
27.1 Linux 驱动模型概述
Linux 驱动由三大核心组件协同工作:内核模块、udev 和 firmware。
27.1.1 内核模块
内核模块(Kernel Module)是可动态加载的驱动程序,扩展名为 .ko,存放于 /lib/modules/$(uname -r)/ 目录下。
# 查看当前已加载的模块
lsmod
# 查看模块详细信息
modinfo i915
# 手动加载模块
sudo modprobe btusb
# 手动卸载模块
sudo modprobe -r btusb
# 列出模块依赖
modprobe --show-depends i915开机自动加载模块:
# 创建配置文件
echo "btusb" | sudo tee /etc/modules-load.d/btusb.conf屏蔽(黑名单)模块:
# 创建黑名单配置
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf27.1.2 udev 设备管理
udev 是 Linux 的设备管理器,负责在设备插入时自动加载驱动并创建设备节点。
# 监控设备事件
udevadm monitor
# 查看设备属性
udevadm info -a /dev/sda
# 重新加载 udev 规则
sudo udevadm control --reload-rules
sudo udevadm trigger自定义 udev 规则示例(/etc/udev/rules.d/99-custom.rules):
# 为特定 USB 设备设置权限
SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", MODE="0666", GROUP="plugdev"
27.1.3 Firmware(固件)
许多硬件需要额外的固件文件才能工作,固件存放于 /lib/firmware/ 目录。
# 安装 Linux 固件包
sudo pacman -S linux-firmware
# 额外固件(部分硬件需要)
sudo pacman -S linux-firmware-whence
# 查看内核请求的固件
dmesg | grep -i firmware27.2 触摸板驱动
Arch Linux 使用 libinput 作为默认输入驱动。
27.2.1 安装与基本配置
# 安装 libinput(通常已预装)
sudo pacman -S libinput xf86-input-libinput
# 列出输入设备
libinput list-devices
# 测试触摸板事件
sudo libinput debug-events --device /dev/input/event5创建 Xorg 配置文件 /etc/X11/xorg.conf.d/30-touchpad.conf:
Section "InputClass"
Identifier "touchpad"
Driver "libinput"
MatchIsTouchpad "on"
Option "Tapping" "on"
Option "TappingDrag" "on"
Option "NaturalScrolling" "true"
Option "ClickMethod" "clickfinger"
Option "DisableWhileTyping" "true"
Option "ScrollMethod" "twofinger"
Option "AccelSpeed" "0.3"
EndSection
27.2.2 手势设置
# 安装手势管理工具
sudo pacman -S libinput-gestures
# 或使用更现代的 fusuma(AUR)
yay -S fusumalibinput-gestures 配置文件 ~/.config/libinput-gestures.conf:
gesture swipe up 3 xdotool key super
gesture swipe down 3 xdotool key super+d
gesture swipe left 3 xdotool key alt+Right
gesture swipe right 3 xdotool key alt+Left
gesture pinch in 2 xdotool key ctrl+minus
gesture pinch out 2 xdotool key ctrl+plus
# 启动手势服务
libinput-gestures-setup start
libinput-gestures-setup autostart27.2.3 Wayland 下的触摸板
在 Wayland 环境下,触摸板配置通过桌面环境的设置工具完成。对于 Sway:
# ~/.config/sway/config
input type:touchpad {
tap enabled
natural_scroll enabled
dwt enabled
accel_profile adaptive
pointer_accel 0.3
}
27.3 打印机驱动
27.3.1 CUPS 安装与配置
# 安装 CUPS 及相关组件
sudo pacman -S cups cups-pdf ghostscript
# 启动 CUPS 服务
sudo systemctl enable --now cups
# Web 管理界面
# 浏览器访问 http://localhost:63127.3.2 驱动安装
# 通用打印机驱动
sudo pacman -S gutenprint foomatic-db foomatic-db-engine
# HP 打印机
sudo pacman -S hplip
hp-setup -i # 交互式设置
# Brother 打印机(AUR)
yay -S brother-mfc-l2710dw
# Epson 打印机
sudo pacman -S epson-inkjet-printer-escpr27.3.3 命令行打印
# 查看可用打印机
lpstat -p -d
# 打印文件
lp -d printer_name document.pdf
# 查看打印队列
lpq
# 取消打印任务
cancel job_id27.3.4 网络打印机发现
# 安装 Avahi 用于自动发现
sudo pacman -S avahi nss-mdns
sudo systemctl enable --now avahi-daemon
# 编辑 /etc/nsswitch.conf,在 hosts 行添加 mdns_minimal [NOTFOUND=return]27.4 摄像头驱动
27.4.1 UVC 与 V4L2
大多数 USB 摄像头遵循 UVC(USB Video Class)标准,Linux 内核原生支持。
# 检查摄像头是否被识别
lsusb | grep -i cam
v4l2-ctl --list-devices
# 安装 v4l 工具
sudo pacman -S v4l-utils
# 查看摄像头支持的格式
v4l2-ctl --list-formats-ext -d /dev/video0
# 查看/设置摄像头参数
v4l2-ctl -d /dev/video0 --all
v4l2-ctl -d /dev/video0 --set-ctrl brightness=128
v4l2-ctl -d /dev/video0 --set-ctrl exposure_auto=127.4.2 测试摄像头
# 使用 mpv 测试
mpv av://v4l2:/dev/video0
# 使用 ffplay 测试
ffplay /dev/video0
# 使用 cheese(GNOME 摄像头应用)
sudo pacman -S cheese27.4.3 虚拟摄像头
# 安装 v4l2loopback
sudo pacman -S v4l2loopback-dkms
# 加载虚拟摄像头模块
sudo modprobe v4l2loopback video_nr=10 card_label="VirtualCam"
# 用 ffmpeg 向虚拟摄像头推送内容
ffmpeg -re -i video.mp4 -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video1027.5 视频硬件加速
视频硬件加速是利用 GPU 的专用解码/编码单元来处理视频,大幅降低 CPU 占用。
27.5.1 VA-API vs VDPAU
| 特性 | VA-API | VDPAU |
|---|---|---|
| 全称 | Video Acceleration API | Video Decode and Presentation API for Unix |
| 开发者 | Intel(后转交 freedesktop) | NVIDIA |
| 主要支持 | Intel / AMD GPU | NVIDIA GPU |
| Wayland 支持 | 完善 | 有限 |
| 现代趋势 | 推荐 | 逐渐淘汰 |
| 编码支持 | 支持 | 不支持 |
27.5.2 各显卡硬件解码配置
Intel 显卡:
# 较新的 Intel GPU(Broadwell 及以后)
sudo pacman -S intel-media-driver
# 较旧的 Intel GPU(GMA 4500 到 Coffee Lake)
sudo pacman -S libva-intel-driver
# 验证
vainfo| Intel 世代 | 推荐驱动 | 支持的编解码 |
|---|---|---|
| GMA 4500 - Haswell | libva-intel-driver | H.264 |
| Broadwell - Ice Lake | intel-media-driver | H.264, H.265, VP9 |
| Tiger Lake+ | intel-media-driver | H.264, H.265, VP9, AV1 |
AMD 显卡:
# AMD GPU 使用 Mesa 的 VA-API 支持
sudo pacman -S libva-mesa-driver mesa-vdpau
# 验证
vainfo
vdpauinfoNVIDIA 显卡:
# 专有驱动(VDPAU 原生支持)
sudo pacman -S nvidia nvidia-utils
# VA-API 兼容层
sudo pacman -S libva-nvidia-driver
# 验证
vdpauinfo
vainfo
# 设置环境变量(使用 NVIDIA VA-API)
export LIBVA_DRIVER_NAME=nvidia
export NVD_BACKEND=direct27.5.3 mpv 硬件加速配置
编辑 ~/.config/mpv/mpv.conf:
# Intel / AMD(VA-API)
hwdec=vaapi
vo=gpu-next
gpu-api=vulkan
gpu-context=waylandvk
# NVIDIA(推荐使用 nvdec)
hwdec=nvdec
vo=gpu-next
gpu-api=vulkan
# 自动选择最佳硬件解码
hwdec=auto-safe验证硬件加速是否生效:
# 播放视频时按 Shift+I 查看统计信息
mpv --hwdec=vaapi video.mkv
# 查看 VO 和 hwdec 状态27.5.4 VLC 硬件加速配置
工具 → 偏好设置 → 输入/编解码器:
硬件加速解码 → VA-API 视频解码器
命令行方式:
# VA-API
vlc --avcodec-hw=vaapi video.mkv
# VDPAU
vlc --avcodec-hw=vdpau video.mkv27.5.5 浏览器硬件加速
Chromium / Chrome:
# 启动参数
chromium --enable-features=VaapiVideoDecodeLinuxGL,VaapiVideoEncoder,VaapiVideoDecoder
# 或写入配置文件 ~/.config/chromium-flags.conf
--enable-features=VaapiVideoDecodeLinuxGL,VaapiVideoDecoder,VaapiVideoEncoder
--disable-features=UseChromeOSDirectVideoDecoder
--enable-gpu-rasterization
--enable-zero-copy
--ignore-gpu-blocklist在 chrome://gpu 页面验证硬件加速状态。
Firefox:
在 about:config 中设置:
| 配置项 | 值 |
|---|---|
media.ffmpeg.vaapi.enabled | true |
media.hardware-video-decoding.enabled | true |
gfx.webrender.all | true |
widget.dmabuf.force-enabled | true(Wayland) |
# 启动 Firefox 时设置环境变量
MOZ_ENABLE_WAYLAND=1 MOZ_DRM_DEVICE=/dev/dri/renderD128 firefox27.5.6 验证硬件加速
# 安装 intel-gpu-tools(Intel)
sudo pacman -S intel-gpu-tools
sudo intel_gpu_top # 播放视频时查看 Video 引擎是否活跃
# AMD GPU
sudo cat /sys/kernel/debug/dri/0/amdgpu_pm_info
# NVIDIA
nvidia-smi # 查看 GPU 使用率
# 通用方式:播放视频时查看 CPU 使用率
# 硬件加速正常时 CPU 占用应明显降低27.6 USB 设备管理
27.6.1 基本工具
# 列出 USB 设备
lsusb
lsusb -t # 树状显示
lsusb -v -d 1234:5678 # 详细信息
# 安装 usbutils
sudo pacman -S usbutils
# USB 设备文件系统
ls /sys/bus/usb/devices/27.6.2 USB 电源管理
# 查看 USB 设备电源状态
cat /sys/bus/usb/devices/1-1/power/control
# 禁用特定 USB 端口的自动挂起
echo "on" | sudo tee /sys/bus/usb/devices/1-1/power/controludev 规则禁止特定设备自动挂起:
# /etc/udev/rules.d/50-usb-power.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{power/control}="on"
27.6.3 USB 权限管理
# 为普通用户添加 USB 设备访问权限(如 Android 调试)
# /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="adbusers"27.7 存储设备驱动
27.7.1 NVMe
# 安装 NVMe 管理工具
sudo pacman -S nvme-cli
# 列出 NVMe 设备
sudo nvme list
# 查看 SMART 信息
sudo nvme smart-log /dev/nvme0
# 查看固件版本
sudo nvme id-ctrl /dev/nvme0
# 固件更新
sudo nvme fw-download /dev/nvme0 --fw=firmware.bin
sudo nvme fw-activate /dev/nvme0 --slot=1 --action=127.7.2 SATA
# 查看 SATA 设备信息
sudo hdparm -I /dev/sda
# SMART 健康检查
sudo pacman -S smartmontools
sudo smartctl -a /dev/sda
sudo smartctl -t short /dev/sda # 短时自检27.7.3 USB 存储
# USB 存储设备通常自动挂载
# 手动挂载
sudo mount /dev/sdb1 /mnt/usb
# 使用 udisksctl 免 root 挂载
udisksctl mount -b /dev/sdb1
udisksctl unmount -b /dev/sdb1
udisksctl power-off -b /dev/sdb
# 安装自动挂载工具
sudo pacman -S udiskie
udiskie & # 后台运行27.8 输入设备
27.8.1 键盘背光
# 查看背光设备
ls /sys/class/leds/ | grep kbd
# 调节键盘背光
echo 2 | sudo tee /sys/class/leds/tpacpi::kbd_backlight/brightness
# 使用 brightnessctl
sudo pacman -S brightnessctl
brightnessctl --device='tpacpi::kbd_backlight' set 2
brightnessctl --device='tpacpi::kbd_backlight' info27.8.2 特殊按键映射
# 查看按键事件
sudo pacman -S evtest
sudo evtest
# 使用 xmodmap 重映射(Xorg)
xmodmap -e "keycode 135 = Menu"
# 使用 keyd 进行系统级按键映射
yay -S keyd
sudo systemctl enable --now keydkeyd 配置 /etc/keyd/default.conf:
[ids]
*
[main]
capslock = overload(control, esc)
rightalt = layer(nav)
[nav]
h = left
j = down
k = up
l = right27.8.3 游戏手柄
# 安装手柄驱动
sudo pacman -S xboxdrv # Xbox 手柄
sudo pacman -S game-devices-udev # AUR 中的通用游戏设备 udev 规则
# 测试手柄
jstest /dev/input/js0
# 查看手柄信息
evtest /dev/input/event*27.9 传感器驱动
27.9.1 lm_sensors 配置
# 安装
sudo pacman -S lm_sensors
# 自动检测传感器(交互式,对每个问题按 Enter 或 yes)
sudo sensors-detect
# 查看传感器数据
sensors
# 持续监控
watch -n 1 sensors输出示例:
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +55.0°C (high = +100.0°C, crit = +100.0°C)
Core 0: +52.0°C (high = +100.0°C, crit = +100.0°C)
Core 1: +54.0°C (high = +100.0°C, crit = +100.0°C)
27.9.2 fancontrol 风扇控制
# 生成风扇控制配置
sudo pwmconfig
# 启动风扇控制服务
sudo systemctl enable --now fancontrol配置文件 /etc/fancontrol 示例:
INTERVAL=10
DEVPATH=hwmon0=devices/platform/coretemp.0
DEVNAME=hwmon0=coretemp
FCTEMPS=hwmon0/pwm1=hwmon0/temp1_input
FCFANS=hwmon0/pwm1=hwmon0/fan1_input
MINTEMP=hwmon0/pwm1=40
MAXTEMP=hwmon0/pwm1=75
MINSTART=hwmon0/pwm1=50
MINSTOP=hwmon0/pwm1=30
MINPWM=hwmon0/pwm1=0
MAXPWM=hwmon0/pwm1=255
27.9.3 光线传感器
# 安装 iio-sensor-proxy
sudo pacman -S iio-sensor-proxy
# 监控光线传感器
monitor-sensor
# 检查传感器设备
ls /sys/bus/iio/devices/27.10 电源管理驱动
27.10.1 TLP
TLP 是最流行的 Linux 电源管理工具,专为笔记本优化。
# 安装
sudo pacman -S tlp tlp-rdw
# 启动服务
sudo systemctl enable --now tlp
sudo systemctl enable --now NetworkManager-dispatcher # TLP Radio Device Wizard
# 禁用冲突服务
sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket
# 查看状态
sudo tlp-stat -s
# 查看电池信息
sudo tlp-stat -b
# 查看完整报告
sudo tlp-statTLP 配置 /etc/tlp.conf 常用选项:
TLP_DEFAULT_MODE=BAT
CPU_SCALING_GOVERNOR_ON_AC=performance
CPU_SCALING_GOVERNOR_ON_BAT=powersave
CPU_ENERGY_PERF_POLICY_ON_AC=performance
CPU_ENERGY_PERF_POLICY_ON_BAT=power
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0
WIFI_PWR_ON_BAT=on
USB_AUTOSUSPEND=1
RUNTIME_PM_ON_AC=on
RUNTIME_PM_ON_BAT=auto
START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=8027.10.2 auto-cpufreq
# 安装(AUR)
yay -S auto-cpufreq
# 启动服务
sudo systemctl enable --now auto-cpufreq
# 实时监控
sudo auto-cpufreq --monitor
# 查看状态
auto-cpufreq --stats27.10.3 thermald
# 安装
sudo pacman -S thermald
# 启动服务
sudo systemctl enable --now thermald
# 查看配置
cat /etc/thermald/thermal-conf.xml注意:TLP 与 auto-cpufreq 不应同时使用,二者功能有冲突。选择其一即可。
27.11 无线网卡驱动
27.11.1 Intel WiFi
Intel 无线网卡通常开箱即用,驱动包含在 linux-firmware 中。
# 确认固件已安装
sudo pacman -S linux-firmware
# 查看无线网卡信息
lspci -k | grep -A 3 -i network
# Intel WiFi 模块通常为 iwlwifi
lsmod | grep iwl
dmesg | grep iwl常见问题与解决:
# 如果 WiFi 6E(6 GHz)频段不可用
# 检查区域设置
iw reg get
sudo iw reg set CN # 设置国家代码
# 固件加载失败
dmesg | grep -i "firmware"
# 可能需要安装更新的固件包27.11.2 Broadcom 无线网卡
# 确认型号
lspci -k | grep -A 3 -i broadcom
# 开源驱动(推荐,大部分型号)
sudo pacman -S broadcom-wl-dkms
# 如果开源驱动不工作,尝试闭源驱动
# 注意:需要先屏蔽冲突模块
echo -e "blacklist b43\nblacklist ssb\nblacklist bcma" | sudo tee /etc/modprobe.d/broadcom-wl.conf
# 重新加载
sudo modprobe wl| 芯片型号 | 推荐驱动 |
|---|---|
| BCM4313 | broadcom-wl-dkms |
| BCM4331 | broadcom-wl-dkms |
| BCM43142 | broadcom-wl-dkms |
| BCM4360 | broadcom-wl-dkms |
| BCM43602 | b43(内核自带) |
27.11.3 Realtek 无线网卡
# 查看型号
lsusb | grep -i realtek
lspci | grep -i realtek
# RTL8821CE / RTL8822CE(常见)
yay -S rtl8821ce-dkms-git
# RTL8852BE
yay -S rtw89-dkms-git
# RTL8812AU(USB 网卡)
yay -S rtl8812au-dkms-git27.11.4 通用无线问题排查
# 检查无线接口
ip link show
iw dev
# 检查 RF Kill 状态
rfkill list
rfkill unblock all
# 扫描 WiFi 网络
sudo iw dev wlan0 scan | grep -i ssid
# 查看连接状态
iw dev wlan0 link
iwconfig wlan027.12 指纹识别器
27.12.1 fprintd 安装与配置
# 安装
sudo pacman -S fprintd
# 查看支持的设备
lsusb | grep -i fingerprint
# 录入指纹
fprintd-enroll
# 验证指纹
fprintd-verify
# 列出已录入的指纹
fprintd-list $USER
# 删除指纹
fprintd-delete $USER27.12.2 PAM 集成
编辑 /etc/pam.d/system-local-login,在第一行添加:
auth sufficient pam_fprintd.so
支持指纹登录的 PAM 文件:
| 文件 | 作用 |
|---|---|
/etc/pam.d/system-local-login | TTY 登录 |
/etc/pam.d/sddm | SDDM 登录 |
/etc/pam.d/gdm-password | GDM 登录 |
/etc/pam.d/sudo | sudo 认证 |
/etc/pam.d/polkit-1 | Polkit 认证 |
27.12.3 部分不支持的指纹识别器
# 某些 Goodix 指纹识别器需要额外驱动
yay -S libfprint-goodixtls-git
# 查看 fprintd 日志
journalctl -u fprintd -f27.13 Thunderbolt / USB4
# 安装 bolt 管理工具
sudo pacman -S bolt
# 列出 Thunderbolt 设备
boltctl list
# 授权设备
boltctl authorize DEVICE_UUID
# 永久信任设备
boltctl enroll DEVICE_UUID
# 撤销信任
boltctl forget DEVICE_UUID
# 查看设备详情
boltctl info DEVICE_UUIDThunderbolt 安全级别查看:
cat /sys/bus/thunderbolt/devices/domain0/security
# none - 无安全验证
# user - 用户授权
# secure - 安全连接27.14 红外接收器
# 安装 LIRC(Linux Infrared Remote Control)
sudo pacman -S lirc
# 启动服务
sudo systemctl enable --now lircd
# 列出红外设备
ls /dev/lirc*
# 测试接收
mode2 -d /dev/lirc0
# 录制遥控器按键
irrecord -d /dev/lirc0 ~/my_remote.conf
# 将配置复制到系统目录
sudo cp ~/my_remote.conf /etc/lirc/lircd.conf.d/使用 ir-keytable 替代方案(更现代):
# 安装 v4l-utils(包含 ir-keytable)
sudo pacman -S v4l-utils
# 列出红外设备
ir-keytable
# 测试接收
ir-keytable -t -s rc0
# 加载按键映射
ir-keytable -c -w /etc/rc_keymaps/my_remote.toml27.15 驱动故障排查通用流程
1. 确认硬件被识别
lspci / lsusb / dmesg
2. 检查驱动是否加载
lsmod | grep <driver>
3. 查看内核日志
dmesg | grep -i error
journalctl -b -p err
4. 检查固件
dmesg | grep -i firmware
5. 安装缺失的固件/驱动
pacman -S <package>
6. 重新加载模块
sudo modprobe -r <module>
sudo modprobe <module>
7. 搜索 Arch Wiki
https://wiki.archlinux.org/
常用硬件信息工具汇总:
| 工具 | 用途 | 安装包 |
|---|---|---|
lspci | PCI 设备列表 | pciutils |
lsusb | USB 设备列表 | usbutils |
lshw | 完整硬件信息 | lshw |
hwinfo | 详细硬件信息 | hwinfo |
inxi | 系统信息概览 | inxi |
dmidecode | DMI/BIOS 信息 | dmidecode |
lscpu | CPU 信息 | util-linux |
lsblk | 块设备信息 | util-linux |
lsmod | 已加载模块 | kmod |
# 生成完整硬件报告
sudo lshw -html > hardware_report.html
inxi -Fxxxz