自從發現Cmus這個終端下的音樂播放器後,就很少使用 GUI 的音樂播放器了。
通過cmus-remote
還能遠程控制,但是使用cmus-remote
仍然需要先啟動Cmus
,否則會提示cmus-remote: cmus is not running
。
而啟動 cmus 就需要打開終端,這不就和 GUI 的音樂播放器差不多了嘛,這對一個懶人來說是不能忍的,那麼有什麼辦法能在啟動Cmus
的時候給放到後台去呢?
答案是tmux!
tmux是一個終端複用器,類似的還有screen等。
怎麼做?#
我們先整理下思路
首先我們想用cmus-remote
來控制Cmus
,但是需要先啟動Cmus
,那麼我們就需要想一個辦法讓Cmus
在後台啟動,因為我們不需要看它的界面操作,這個過程我們可以用tmux
來完成。
流程如下:
- 用
tmux
創建一個會話 - 在會話中啟動
Cmus
- 把會話放到後台
按照正常思路是行不通的,因為我們需要整個過程不可感知,完全後台操作。
那麼我們需要:
- 後台創建一個
tmux
會話 - 把命令傳給這個後台會話用來啟動
Cmus
tmux
創建後台會話的命令如下:
tmux new -s 會話名 -d
tmux
傳遞命令的命令如下:
tmux send-keys -t 會話名 "傳遞的命令"
那麼整個過程寫到腳本裡就是兩行代碼:
tmux new -s cmus -d # 創建一個名為cmus的tmux會話
tmux send-keys -t cmus "cmus" C-m # 向名為cmus的tmux會話發送cmus命令並回車
# 注意發送的命令如果需要回車執行,需要在後面加一個 C-m ,表示一個回車
啟動後自然需要播放,那麼我們可以在啟動後再用cmus-remote
控制Cmus
播放就行:
tmux new -s cmus -d
tmux send-keys -t cmus "cmus" C-m
sleep 1s
cmus-remote --play
這裡加sleep
是為了防止 cmus 還沒有啟動完,cmus-remote
就執行了,導致音樂沒有播放。
能啟動了自然要能關閉,這裡就直接上代碼:
tmux send-keys -t cmus "cqy" # 向名為cmus的tmux會話發送cqy用來退出cmus
# c代表暫停,q代表退出,y是確認,因為不需要回車所以不用加 C-m
tmux kill-session -t cmus # 幹掉名為cmus的tmux會話
當然也可以簡單粗暴的直接幹掉tmux
會話...
成品#
把上面兩個部分寫成函數,同時用 if 判斷傳入的參數就可以決定觸發哪個了,成品如下:
play() {
tmux new -s cmus -d
tmux send-keys -t cmus "cmus" C-m
sleep 1s
cmus-remote --play
}
quit() {
tmux send-keys -t cmus "cqy"
tmux kill-session -t cmus
}
if [ $1 == "play" ];then
play
elif [ $1 == "quit" ];then
quit
else
echo "指令錯誤!"
fi
cmus-remote 命令#
用cmus-remote --help
可以查看幫助,或者直接man
也可以。
這裡列一些常用的命令:
# 播放
cmus-remote --play
或
cmus-remote -p
# 暫停
cmus-remote --pause
或
cmus-remote --u
# 上一首
cmus-remote --prev
或
cmus-remote -r
# 下一首
cmus-remote --next
或
cmus-remote -n
dwm 按鍵綁定#
用 dwm 的應該都會,我就不水了。