从亲戚那里得到了一对USB小音箱,正好弥补本本的声音太小的不足。本本的音量接口长年接着耳机,怕打扰到别人的时候用耳机,平时开音箱。
然而切换耳机和音箱太麻烦了。USB音箱的本质是一块USB声卡,要在这两个设备之间切换,就是在内置声卡和USB声卡之间切换。在Gnome Shell下,最快的切换路径应该是右上角的音量指示器->声音设置->输出->选择输出设备。对于要经常切换的人来说每次都要执行这么大一步是很痛苦的。稍微好一点的方案就是打开声音设置后不关闭,每次要切换就切换到声音设置窗口,然后直接切换设置。但是……有谁愿意整天开着个基本没用的窗口呢?
于是在重复了数十次这样的操作后,我终于受不了了。为什么不直接在音量菜单上加上设备切换的功能呢?我决定把Gnome Shell的音量指示器给hack一下,满足我的需求。
Gnome的音量指示器代码在/usr/share/gnome-shell/js/ui/status/volume.js
文件里,主要用到一个叫Gvc的组件,这个组件没有文档,只好看gnome shell里的代码。研究了一晚上,基本实现了我的需求:当设备小于2个时,和系统自带的音量菜单没有区别;当设备大于等于2个时,在音量条下方会显示所有的设备,单击即可切换。如下图所示:
我把改动做成了扩展的形式,启用后会替代原有的音量指示器给原来的音量菜单加上输出设备切换项,禁用后还原。扩展已经提交到Gnome Shell Extension网站上了,地址是https://extensions.gnome.org/extension/142/output-device-chooser-on-volume-menu/,目前还在审核中已经通过审核。
代码依旧托管在github上,地址为https://github.com/tigersoldier/Output-device-chooser-on-volume-menu
PS:在研究代码时发现可以直接用滚轮在音量图标上调整音量大小,不必打开音量菜单。@csslayer表示KDE一直有这个功能,我用gnome2的时候一直没试过,不知道gnome2和ubuntu的sound indicator是不是也有这么贴心的设计。
Update:
以前说过GNOME3的一个缺点,在通知栏聊天时,无法看到ibus的候选词界面,确切地说是候选词界面被通知栏聊天界面挡住了。这是GNOME Shell的架构所决定的,目前没有方法可以绕过(除非修改GNOME Shell)本身。唯一的解决方法就是将ibus的界面用GNOME Shell的那一套(Shell Toolkit, St)实现。
更新记录
GNOME3正式发布后在机子上装了一个64位的Arch Linux来体验,发点感想。由于使用时间有限,一些问题可能是我而不是GNOME3本身的问题。另外其实基本上是关于Gnome Shell的(谁让它占了主要位置呢?)