Linux: i3WM下的音量調整

alsamixer程式界面

前言

在我的Ubuntu升級到13.10以前,於i3底下的音量調整,我一直是偷用Gnome的設定,也就是按下鍵盤上的按鈕就行了
但是我的Ubuntu更新到13.10後,Gnome也跟着更新,過去的奇妙bug也就消失了
不過不打緊,沒有的東西,就自己想辦法來弄一個!

i3的設計

i3的自訂性很強,幾乎所有的key binding都可以自己設定需要的功能,像我自己就將視窗移動的binding改成vim的模式,方便操作
所以音量調整,只要找到適當的指令,也能夠輕鬆完成

i3的設定檔案預設放在/home/YOUR_NAME/.i3/config,裏面密密麻麻都是設定,這裏我們着眼於音效按鍵的部分
下面是寫入的設定

~/.i3/config
...
bindsym XF86AudioRaiseVolume exec --no-startup-id amixer -q sset Master 5%+     #Raise sound Vol.
bindsym XF86AudioLowerVolume exec --no-startup-id amixer -q sset Master 5%-     #Decrease sound Vol.
bindsym XF86AudioMute exec --no-startup-id amixer -q -D pulse set Master 1+ toggle  #Toggle mute
...

bindsym:這是i3 config的語法,用來設定某顆鍵盤按鍵的觸發事件
XF86...:這是鍵盤上音量加大,音量減小以及靜音的按鍵名稱
exec:這是i3 config的語法,表示執行後續的程式
--no-startup-id:i3 config exec的參數,主要是防止視窗的轉移,詳細請看Link
amixer -q sset Master 5%+:amixer是Ubuntu內建的音效控制程式,原則上每個Linux distro都會有
-q(quite)會取消顯示amixer的輸出資訊,sset Master 5%+則表示把主音量提高五個百分點

如此一來,就可以繼續用鍵盤控制音量了
但是,這樣的結果依然是不夠的,因爲我們不能知道現在的音量到底有多大
所以我決定再來強化這個功能!

By the power of shell script

廢話不多說,先來看看結果和檔案(要注意shell script有無執行權限)

效果

~/.i3/config
...
bindsym XF86AudioRaiseVolume exec --no-startup-id ~/.i3/sound.sh raise
bindsym XF86AudioLowerVolume exec --no-startup-id ~/.i3/sound.sh down
bindsym XF86AudioMute exec --no-startup-id amixer -q -D pulse set Master 1+ toggle
...
~/.i3/sound.sh
#!/bin/bash


if [ $1 == "raise" ]; then
        amixer -q sset Master 5%+

        Msg="Master Vol:"
        Vol=$(amixer get Master | egrep -o "[0-9]+%")
        notify-send -t 1 "$Msg $Vol"
                                                                                                                                                                                           
elif [ $1 == "down" ]; then
        amixer -q sset Master 5%-

        Msg="Master Vol:"      
        Vol=$(amixer get Master | egrep -o "[0-9]+%")
        notify-send -t 1 "$Msg $Vol"    
fi

我的做法是,將i3 config的鍵盤觸發事件改成我自己撰寫的shell script,來多做一些事情
這樣在按下音量按鈕後,同時還會出現現在音量是多少的提示,更增添的完整度 還有感覺自己有點厲害

由於我script寫的很少,撰寫這份script的過程還滿痛苦的,裏面的語法規範很多跟我的coding style相衝,寫起來有些卡
該script內包含了簡單的shell script變數概念,還有微量的正規表示式,不過不是這裏的重點,就不多談

關於shell script的寫法,可以參考鳥哥的教學
關於各程式的參數細節,則請自行查閱man page

雜談

老實說,還真的不知道有什麼機會可以摸到shell script

參考資料

i3 User's Guide: http://i3wm.org/docs/userguide.html#exec
Linux (Ubuntu) 的音效架構: https://nyllep.wordpress.com/2013/03/10/sound-on-linux/

Comments

comments powered by Disqus