lirc
をセットアップして、リモートでPCを制御します。異なるモードを切り替えるには、次のように。lircrcを編集しました。
begin vlc
include ~/.lirc/vlc
end vlc
begin gnome
include ~/.lirc/gnome
end gnome
begin firefox
include ~/.lirc/firefox
end firefox
begin me-tv
include ~/.lirc/me-tv
end me-tv
begin
prog = irexec
button = KEY_YELLOW
config = if [ -n $(pgrep -f vlc) ]; then (vlc &); fi
mode = vlc
end
begin
prog = irexec
button = KEY_GREEN
mode = gnome
end
begin
prog = irexec
button = KEY_RED
config = if [ -n $(pgrep -x firefox) ]; then (firefox &); fi
mode = firefox
end
begin
prog = irexec
button = KEY_BLUE
config = if [ -n $(pgrep -x me-tv) ]; then (me-tv &); fi
mode = me-tv
end
Firefoxに切り替えることを除き、すべて正常に動作します。Firefoxの実行中に赤いボタンを押すと、モードが切り替わります(必要に応じて)and2番目のウィンドウを開きます/ Firefoxのインスタンス(あるべきではない)。
問題はFirefoxでのみ発生します。
Edit
→Preferences
→Tabs
→Open new windows in a new tab instead
は既に有効になっています:
Firefoxの実行中に何が起こるか、ターミナルでfirefox
を起動しますか?
firefox
-2番目のウィンドウが開きますfirefox about:startpage
-事前設定されたスタートページでFirefoxの新しいタブが開きますfirefox about:blank
-個人のスタートページでFirefoxの新しいタブが開きます( Speeddial )firefox chrome://speeddial/content/speeddial.xul
(これはSpeeddialの開始ページのアドレスです)-何も起こりませんFirefoxが実行されていないときに何が起こりますか、端末でfirefox
を起動しますか?
firefox
-Preferences
(Show my windows and tabs from last time
)で設定されたとおりにFirefoxが開きますfirefox about:startpage
-Firefoxが開き、事前設定された開始ページを含む新しいタブが追加されますfirefox about:blank
-新しい空白のタブが追加されてFirefoxが開きますfirefox chrome://speeddial/content/speeddial.xul
-Firefoxが開きません:*** Preventing external load of chrome: URI into browser window.
Use -chrome <uri> instead
そのため、スクリプト内のコマンド(config = ...
)を変更し、about:blank
のようなアドレスを追加すると、問題が部分的に解決されます。問題が残っているので、Firefoxが既に実行されているときにFirefoxをフォアグラウンドに入れない。これは時々のみ発生します。
この不正行為を修正するためにこのスクリプトを編集するのを手伝ってくれる人はいますか? ( ソース 修正したスクリプトの)。
その中の一部のシェルコード source は、主張することを実行しません。主に行くタイプ:
if [ -n $(pgrep -f vlc) ]; then (vlc &); fi
これは、2つのケースでvlc &
を実行します。 「vlc」に一致するプロセスがなく、「vlc」に一致するプロセスが1つだけの場合。 「vlc」に一致するプロセスが複数ある場合、vlc &
は実行されません。したがって、これらのifブロックはかなり役に立たない。代わりにvlc &
を実行するだけで、おそらくより正確になります。
残念ながら、インターネット上ではBad Shellのアドバイスは一般的です。
問題の説明から、結果が欲しいのは、プログラムがまだ実行されていない場合は実行され、実行されている場合は、そのウィンドウを前面に表示して、フォーカスを与えることです。これを行うには、wmctrl
を使用できます。
wmctrl -a 'Mozilla Firefox'
は、タイトルに「Mozilla Firefox」を含むウィンドウを見つけて、「アクティブ化」します。つまり、それが入っているワークスペースに移動し、前面に持ってきて、フォーカスを与えます。第二に、一致するウィンドウがない場合、wmctrlは何もせず、ゼロ以外の(false)終了ステータスで終了します。この場合、プログラムが実行されていないと想定し、代わりに開始できます。
wmctrl -a 'Mozilla Firefox' || firefox &
それでもまだ完璧ではありません。 firefoxウィンドウ以外のウィンドウでは、タイトルにその文字列が含まれる可能性があるため、この場合に適切なウィンドウを識別するより信頼性の高い方法を見つける必要があります。
-xを使用すると、wmctrlはウィンドウのVM_CLASSで動作し、通常はプログラムごとに一意の値を持ちます。 firefoxの実行中にwmctrl -lx
を実行するとわかるように、すべてのfirefoxウィンドウにはVM_CLASS "Navigator.Firefox"があります。
$ wmctrl -lx
...
0x03ba3d43 3 gnome-terminal.Gnome-terminal pilot Terminal
0x04c000bc 0 Navigator.Firefox pilot Group #1 - Speed Dial - Mozilla Firefox
これにより、VM_CLASSとして正確に「Navigator.Firefox」を持つウィンドウを選択できます。
wmctrl -Fxa Navigator.Firefox || firefox &
同じことが他のプログラムにも当てはまると思います。