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 セッション名 "渡すコマンド"
したがって、スクリプト全体は次の 2 行のコードになります。
tmux new -s cmus -d # cmusという名前のtmuxセッションを作成する
tmux send-keys -t cmus "cmus" C-m # cmusという名前のtmuxセッションにcmusコマンドを送信し、Enterキーを押す
# コマンドを送信する場合、Enterキーを押す必要がある場合は、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は確認を意味します。Enterキーが不要なので、C-mを追加する必要はありません
tmux kill-session -t cmus # cmusという名前のtmuxセッションを終了する
もちろん、単純にtmuxセッションを終了することもできます...
完成品#
上記の 2 つの部分を関数として書き、引数によってどちらをトリガーするかを決定するために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 を使用している人は、すでに知っていると思います。