現在、いくつかのカスタムショートカットを追加しています。
最小化されたRhythmboxウィンドウを表示できません。このタスクには、シェルスクリプトでwmctrlを使用します。以下を参照してください。キーコンボを押しても、何も起こりません(視覚的に)。たとえば、Firefoxを公開すると、以下のシェルスクリプトの適合バージョンを使用しても問題なく機能します。 Rhythmboxが同じように動作しないのはなぜですか?
上記のシェルスクリプト:
sh -c "if pgrep -x rhythmbox > /dev/null; then wmctrl -a rhythmbox; else rhythmbox; fi"
重要な編集:
どうやら私のスクリプトは現在動作しています-それについて何も変更することなく。ただし、killall rhythmbox
を実行しました。その後、私のシェルスクリプトは期待どおりに機能しました。質問を削除する代わりに修正を追加するだけで、誰かが同じ問題に出くわすのを助けることができると思います。これが起こった理由を知っていると思うなら、あなたのtheroyを共有してください。
まだ別の編集:
うわー、大丈夫...その最後の編集を追加してから数秒後、私は上記のショートカットを再度使用しようとしましたが、機能しませんでした。プロセスを強制終了し、すべてが再び機能しました-then
AND else
body。他のいくつかのウィンドウをクリックした後、再び動作しなくなりました。 killall rhythmbox
を実行し、エラーを再現できなかった場合でも、それが完全に機能することを確認した後、それは一種のランダムな動作であるという結論に達しました。もちろん、疑似ランダムです。自分で試してみたい場合は、その方法を知っています。 Sudo apt install wmctrl
を実行してwmctrlを取得できます。 Ubuntu 16.04 LTSでバージョン1.07を使用していますが、非常に混乱しています。
最後の編集(最後とは言いません):
キーの組み合わせを押すと、Firefoxが実際に表示されるようになりました。それはクールで、私が望むものではありません。私は今大きなコーヒーを飲み、何か他のことをします、すごい。
問題は、wmctrl -a
を使用して、nameでウィンドウを識別することです。 man wmctrl
から:
-a <WIN>
Switch to the desktop containing the window <WIN>, raise the window, and give it focus.
<WIN>
は、ウィンドウ名の識別stringです。
特にあなたの場合、Rhythmboxは曲に応じてウィンドウ名を変更するため、これはエラーを引き起こす可能性があります。ウィンドウclassまたはid
でウィンドウを識別する必要があります。
後者は以下を使用して実行できます。
wmctrl -ia
オプション-i
はwindow-idを表します。
-i Interpret window arguments (<WIN>) as a numeric value rather
than a string name for the window. If the numeric value starts
with the prefix '0x' it is assumed to be a hexadecimal number.
ウィンドウが属するwindow-idとpidの両方は、コマンドによって呼び出されるwindow-listから取得できます。
wmctrl -lp
最新のウィンドウを上げる信頼性の高いコマンドRhythmboxは次のとおりです。
wmctrl -ia "$(wmctrl -lp | grep "$(pgrep rhythmbox)" | tail -1 | awk '{ print $1 }')"
wmctrl -lp
pidを含むすべてのウィンドウをリストします。このコマンドの重要な特性は、ウィンドウをリストすることです作成された順に。
したがって:
wmctrl -lp | grep "$(pgrep rhythmbox)" | tail -1 | awk '{ print $1 }'
意志:
属するすべてのウィンドウ+ PIDをリストします。
wmctrl -lp
rhythmboxに属するものを見つけます。
grep "$(pgrep rhythmbox)"
最後のもの(最後に作成されたものでもあります)を見つけます。
tail -1
行の最初の文字列(window -id)を抽出します。
awk '{ print $1 }'
コマンド:
wmctrl -ia
次に、IDで最新のRhythmboxウィンドウを上げます。
便宜上、引用符の問題を防ぐために、コマンドを使用して小さなスクリプトを作成し、ショートカットから実行します。
#!/bin/bash
wmctrl -ia "$(wmctrl -lp | grep "$(pgrep rhythmbox)" | tail -1 | awk '{ print $1 }')"
executableにして、ショートカットキーを追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 。 「+」をクリックして、コマンドを追加します。
/path/to/script.sh
複数のアプリケーションでコマンド/スクリプトを使用しているようです。アプリケーションごとに個別のスクリプトを作成する代わりに、スクリプトに対してアプリケーションargumentを作成できます。
#!/bin/bash
app=$(pgrep $1)
wmctrl -ia "$(wmctrl -lp | grep "$app" | tail -1 | awk '{ print $1 }')"
それから
/path/to/script.sh gedit
最後に作成されたgedit
ウィンドウを表示しますが、
/path/to/script.sh rhythmbox
最後に作成されたrhythmbox
ウィンドウなどを表示します。