自从发现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 的应该都会,我就不水了.