解决Manjaro KDE音量键无故失效问题

2023.8.8更新:我目前使用的是archlinux. 这几天发现音量键又无法控制系统音量了,我认为问题在于plasma-pa这个包与我的笔记本可能存在冲突,这个包属于plasma组包,有些人认为它可以被kmix替代(见KDE – Archwiki),但在我这唯一能成功的方法是plasma-pa和kmix一起安装。


最近开学季考试周一直在折腾Linux系统,算是迈出了从云服务器到个人日常使用(移动硬盘方案)的一大步。诚然,Manjaro系统仍然需要我花很多时间和精力去试错、学习和解决,当然对于某些爱好者来说,“折腾”就是一种乐趣。

本文就是一篇关于我在Manjaro上遇到的一个棘手的问题的解决方案。不像其他问题,这个问题我在全网上翻了许久也没能找到解决方案,最终综合了各种信息,结合了自己的一些猜想,另外沾了点ChatGPT的智慧(帮助程度难说,但的确给了我一定的便利),最终给出了一个原创的较为完美的解决方案。想直接了解解决方法的朋友可直接翻到第2节末(由于相同的问题可能由不同的原因引起,故不保证我的解决方法对其他人有效)。

1. 问题描述

首先是我的电脑环境:

  • 系统:Manjaro(当前滚动最新版)
  • 时间:2023年3月1日
  • 桌面环境:KDE
  • 笔记本:联想 Yoga 14s 2021
  • 键盘布局:80键

键盘上的音量增减、静音键(F2/F3/F1)在开机后的一段时间内是能够正常工作的,但在某个时间点后失效,屏幕上不会出现音量条UI,音量也没有实质性地变化。

一些格外信息:

  1. KDE 设置-快捷键正确设置了键盘键,且重新设置、设置为其他快捷键均无效
  2. 桌面托盘里的音量条可以拖动控制音量
  3. 手机上的KDE Connect可以控制音量
  4. 切换到Windows系统后无该问题
  5. 重启Manjaro可以解决该问题

但是总不可能我每次遇到该问题就重启电脑吧?于是就有了以下经历。

2. 解决历程

网上大多数文章都提到了键盘映射的问题,即键盘上的键没有与操作系统内部的“音量加减”信号绑定,这可以由xev命令查看:

xev

按下音量控制键,观察命令行信息,可以看到F2音量加键的code和它发出的信号:XF86AudioRaiseVolume,这表明键盘正确发出了信号,可以确定键盘映射没有问题(这就排除了网上大多数文章的解决方法了,悲)。

键盘驱动大概率也没问题,我又想到会不会是键盘布局有影响呢?设置中选择的布局是“Generic | 通用104键电脑”,和我的80键不一致。然而我试着问了下ChatGPT,它认为前者是一个通用布局,是适配我的键盘的,一般不会有问题。

苦恼了许久后,我试着问ChatGPT:能否用命令行手动模拟“XF86AudioRaiseVolume“信号呢?居然真有!用到的工具正是我前几天摆弄触摸屏手势时所用到的xdotool,命令如下:

xdotool key XF86AudioRaiseVolume

音量没有增加。

inux系统内核依赖于ALSA管理声卡,下面的命令可以直接调用ALSA管理声卡来增加音量:

amixer set Master 5%+

音量正常增加了,这就把问题锁定在了没有处理XF86AudioRaiseVolume信号上了。这儿可能的原因也很复杂,我试了重启某些服务、查看系统内核日志等很多渠道给出的办法,均宣告失败。

在这里,ChatGPT帮助我分析了几条警告层次的日志报告,虽然没有发现音量问题的痕迹,但也帮我减少了时间开销。

实际上,这时候的我差不多快知道大致的问题了。有几条“上古时代”的评论认为,某个叫KMix的进程错误,导致了键盘音量控制信号的未处理。然而当时我检查了自己的库,并没有安装这个音量混响控制应用,于是没管它了。之后偶然的一次机会,我向ChatGPT问起KDE快捷键配置文件在哪,它给了我如下的地址:

~/.config/kglobalshortcutsrc

用vim打开后,定位到音量加减的地方,如下所示:

[kmix]
_k_friendly_name=KMix
decrease_microphone_volume=Microphone Volume Down,Microphone Volume Down,降低麦克风音量
decrease_volume=Volume Down,Volume Down,降低音量
increase_microphone_volume=Microphone Volume Up,Microphone Volume Up,提高麦克风音量
increase_volume=Volume Up,Volume Up,提高音量
mic_mute=Microphone Mute\tMeta+Volume Mute,Microphone Mute\tMeta+Volume Mute,麦克风静音
mute=Volume Mute,Volume Mute,静音

没有什么异常的地方。但是我观察到第一行出现了一个熟悉的单词:kmix。这和那个我没有安装的软件又有什么奇怪的关系?一个充满玄学的想法出现在我的脑海里:装上它试试:

sudo pacman -Syyu
sudo pacman -S kmix
kmix

忽略一大堆报错信息以及打开的kmix窗口,现在,键盘上的音量控制键神奇地变正常了!

3. 原因猜想

由于用户的某些操作,系统kill了音量管理相关的服务或进程,但却并没有将其正确地重启;亦或是某些应用与音量相关进程冲突,偶然地阻塞了音量进程。

而启动kmix时可能附带重启了音量相关服务或进程,故kmix后音量键就恢复正常了。

以后再遇到这样的问题,打开终端,执行kmix,一气呵成。