Ubuntu+Gnome(Wayland)でターミナルウインドウの表示・非表示のキーバインドを設定する
過去、Macのターミナルをキー入力一つで表示・非表示するスクリプトを書いたのですが、最近久々にメイン端末をUbuntuにしたのでこちらでも同じようにターミナルの表示・非表示をコマンド一つで実行できるようにしてみました。
以前の記事は以下です。
ターミナルだけではなく、ブラウザやエディタなど別のWindowも操作できます。
前提
以下の環境を使用します。
Gnome-Extensionを入れる
まずははじめにWindowを操作するためにGnome Extensionを入れます。
入れるextensionはこちらです。
https://github.com/ickyicky/window-calls
Gnomeのいつからか、ディスプレイサーバープロトコルがXorgからwaylandに変更されており、セキュリティ上の理由からXorgで使用可能だった xdotool
コマンドによる操作が一部できなくなってしまっています。
現在の状態でもxdotoolによって操作できるウインドウもあるみたいですが、Gnome-Terminalは操作することができませんでした。
そこで、上記の拡張機能を追加することで、 gdbus
を経由して各種操作を行えるようにします。
Toggleスクリプトを書く
extensionを入れたらgdbus経由でウインドウの操作ができるようになるため、スクリプトを組んでトグル操作ができるコマンドを作ります。
以下が今回記述したスクリプトです。
#!/bin/bash GDBUS_RESULT=`gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/Windows --method org.gnome.Shell.Extensions.Windows.List | cut -c 3- | rev | cut -c4- | rev` W_ID_LIST=`echo ${GDBUS_RESULT} | jq -c '.[] | select (.in_current_workspace == true and .wm_class == "gnome-terminal-server") | .id'` W_FOCUS_LIST=`echo ${GDBUS_RESULT} | jq -c '.[] | select (.in_current_workspace == true and .wm_class == "gnome-terminal-server") | .focus'` for W_ID in ${W_ID_LIST}; do if [[ "${W_FOCUS_LIST}" == *true* ]]; then # if it containes at lease one focus == true # all hide gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/Windows --method org.gnome.Shell.Extensions.Windows.Minimize ${W_ID} else # show gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/Windows --method org.gnome.Shell.Extensions.Windows.Activate ${W_ID} fi done
gnome-terminal-server
の部分を変更することで他のウインドウにも適用できます。
適当にいい感じの場所に置いておいてください。
bash ./toggle_terminal.sh # ターミナルがフォーカス状態なので非表示になる sleep 3; toggle_terminal.sh # フォーカスを別のウインドウに移すと、3秒後スクリプトによって最前面に表示される
このスクリプトでは、ウインドウの状態(フォーカスされているかどうか)によって表示・非表示が切り替わります。複数ウインドウにも対応しており、すべてのターミナルが同時に表示・非表示されます。
設定からキーバインドに割り当てる
さて、次は上記で作成したスクリプトをキーバインドに割り当て、キー入力一つで切り替わるようにしたいです。
Gnomeの設定から、キーボード→キーボードショートカットで設定できます。
カスタムショートカットが一番下にあります。
/path/to/toggle_terminal.sh
をご自身のスクリプトのパスに置き換えてください。
今回は、私がいつも使っている Alt+`
に割り当てました。
(Option) Gnomeのデフォルトキーバインドを無効化する
もし、設定したいキー入力がGnomeによって使われてしまっている場合、上記の設定だけでは使うことができません。 Alt+`
もGnomeのウインドウ選択機能に使われてしまっていたため、使用することができませんでした。
この場合は、dconfでGnomeの挙動を書き換えてしまいます。一例として `Alt+`
の場合の編集方法を記載しておきます。
apt install dconf-editor
でdconf-editorを入れ起動します。
/org/gnome/desktop/wm/keybindings/
を開き switch-group
の設定を編集します。 Use default valueを無効にし、Custom value似次のように記載します(空にはできないようなので割り当てるバインドは何でもOKです)
['<Ctrl><Shift><Super>Above_Tab', '<Ctrl><Shift><Alt>Above_Tab']
こちらの記事を参考にさせていただきました。
以上で設定終了です。