web-dev-qa-db-ja.com

Openbox:下のレイヤーのウィンドウにアクセスできません

説明されているように、Openboxで「デスクトップの壁紙としてのターミナル」を設定しようとしています ここ

Openboxには<layer>below</layer>を設定する可能性があり、ウィンドウがデスクトップの背景として実行され、ステータスバーに表示されず、「ウィンドウの最小化」の影響を受けません。だから、無駄な画像を壁紙として表示する代わりに、私は実際に端末を持っています。

私がバックグラウンドとして実行している実際の端末はterminatorであり、ターミネーターバイナリへのシンボリックリンクであるシンボリックリンクterminator-wallpaper-1aterminator-wallpaper-1bを作成しました。名前が違うようにするためだけに、私はそれらを区別することができます。

デュアルモニターのセットアップがあり、各モニターにターミネーターの壁紙が必要です。

オープンボックスウィンドウのプロパティはdevilspieによって設定されます。

(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)

そして、これをopenbox構成に入れて、各壁紙が対応するモニター/デスクトップに移動するようにします。

<application name="terminator-wallpaper-1a">
  <focus>yes</focus>
  <layer>below</layer>
  <desktop>1</desktop>
  <position>
    <y>0</y>
    <x>0</x>
    <monitor>1</monitor>
  </position>
  <skip_taskbar>yes</skip_taskbar>
  <maximized>true</maximized>
</application>

<application name="terminator-wallpaper-1b">
  <focus>yes</focus>
  <layer>below</layer>
  <desktop>1</desktop>
  <position>
    <y>0</y>
    <x>0</x>
    <monitor>2</monitor>
  </position>
  <skip_taskbar>yes</skip_taskbar>
  <maximized>true</maximized>
</application>

最後に、これが私がすべてを始める方法です:

devilspie &
terminator-wallpaper-1a -b &
terminator-wallpaper-1b -b &

xdotool set_desktop 0

xdotool search --class 'Terminator-wallpaper-1a' windowunmap --sync windowmap windowsize %1 1920 1180
xdotool search --class 'Terminator-wallpaper-1b' windowunmap --sync windowmap windowsize %1 1920 1180

すべてがうまく機能し、他のすべてのウィンドウを最小化すると、実際にターミネーターの壁紙が表示されます。しかし、実際に使用できるのはそのうちの1つだけです。つまり、集中的、またはアクティブです。もう1つは入力できません。マウスでクリックしてもカーソルが非アクティブであるため、ウィンドウにフォーカスが移動することはありません。

どうすればこれを修正できますか?

解決:

ユーザー@intikaによる徹底的なトラブルシューティングの結果、問題を特定しました。 openbox設定ファイルのセクション<mouse>に次のスニペットを追加すると、問題が修正されました。

<context name="Desktop">
  <mousebind button="Left" action="Press">
    <action name="Focus"/>
    <action name="Raise"/>
  </mousebind>
</context>
1
Martin Vegter

一度に1つのウィンドウ/アプリケーションのみにフォーカスを設定できます。

Openboxの構成では、両方のアプリケーション/壁紙に焦点が当てられますが、技術的にはこれは不可能です。したがって、openboxは、1つのアプリケーションのみに焦点を当てることで、構成を軽減します(それ以外の場合はできません)。

<application name="terminator-wallpaper-1a">
  <focus>yes</focus>
...
<application name="terminator-wallpaper-1b">
  <focus>yes</focus>

この問題を修正する可能性はたくさんあります。それらは、フォーカスを1番目または2番目の画面のデスクトップ/アプリケーション/壁紙に切り替える方法の実装を中心に進化しています。

考えられる解決策1:

フォーカス値をnoに設定するか、フォーカスラインをまとめて削除してから、マウスクリックでフォーカスの切り替えをテストすることができます。

考えられる解決策2:

マウスの位置を使用してフォーカスを設定します。これが openbox wiki です。まず、両方の壁紙アプリのフォーカスエントリを削除してから、メインセクション<focus></focus>の下のopenbox構成に以下を追加します。リンクされたドキュメントに記載されています

<followMouse>yes</followMouse>
<!-- move focus to a window when you move the mouse into it -->

これは他のウィンドウにも影響を与えることに注意してください...

アプリケーションセクションでfollowMouseを使用することもできますが、これはopenboxで処理されるとは思いません。

考えられる解決策2:

Xdotoolをキーボードショートカットと一緒に使用するか、フォーカスを切り替えます。実際、キーボードショートカットに次のようなコマンドを割り当てることができます。また、このソリューションでは、デュアル<focus>yes</focus>を削除/編集して構成を修正する必要があります。

xdotool search --class 'Terminator-wallpaper-1b' windowactivate

Xdotoolと同じように、wmctrlもこの問題に使用できます。

#Lists currently open windows 
wmctrl -l 

#Set focus to windows with title containing STRING
wmctrl -a STRING

注:

<focus>yes</focus>
# if the window should try be given focus when it appears. if this is set
# to yes it doesn't guarantee the window will be given focus. some
# restrictions may apply, but Openbox will try to

注2:

他にも多くの可能な解決策があります、あなたは答えにコメントすることができます、そして私はそれに応じてそれを編集します;)

3
intika