ToggleShowDesktop
のキーバインドがあります 。 メニューを押すと 、すべてのウィンドウが最小化され、デスクトップの壁紙が表示されます(予想どおり):
<keybind key="Menu">
<action name="ToggleShowDesktop"/>
</keybind>
問題は、壁紙を見たくないということです。 terminator
を使用しています 壁紙として、つまりterminator
を起動したとき 、下のレイヤーに配置されます:
<application name="terminator">
<focus>yes</focus>
<layer>below</layer>
<desktop>1</desktop>
<position>
<y>0</y>
<x>0</x>
</position>
<skip_taskbar>yes</skip_taskbar>
<maximized>true</maximized>
</application>
ToggleShowDesktop
を構成することは可能ですか? 「下」のレイヤーに影響を与えないようにしますか?つまり、通常のウィンドウのみを最小化し、terminator
は最小化しないようにします。 。言い換えれば、ターミネーターが通常の壁紙と同じように動作するようにしたいのですが、ToggleShowDesktop
の影響を受けません。 。
Debian Wheezy
を使用しています LXDE
を使用 。
(@ Suchipiによって提案された方法を使用):
元の質問からいくつかの詳細を省略しましたが、これらの詳細は結局のところ関連しているようです:
私のセットアップには、2台のモニターと4台の仮想デスクトップがあります。だから私はterminator
で埋める「8つの壁紙」を持っています 。以前に読んだことから、これらの8つのウィンドウは区別可能である必要があると想定したため、terminator
に対して8つのsymlikを作成しました。 、.i.e。:
/usr/bin/terminator-wallpaper-1a -> terminator
/usr/bin/terminator-wallpaper-1b -> terminator
/usr/bin/terminator-wallpaper-2a -> terminator
...
実際には、8つの異なるアプリケーション(異なる名前)が作成されました。
同様に、.config/openbox/lxde-rc.xml
で 私は1つではなく、8つの定義を持っています:
<application name="terminator-wallpaper-1a">
<desktop>1</desktop>
<position>
<monitor>1</monitor>
</position>
...
</application>
<application name="terminator-wallpaper-1b">
<desktop>1</desktop>
<position>
<monitor>2</monitor>
</position>
...
</application>
<application name="terminator-wallpaper-2a">
<desktop>2</desktop>
<position>
<monitor>1</monitor>
</position>
...
</application>
そして最後に、/.config/autostart
私は8つの*.desktop
を持っています ログイン後に自動的に開始されるファイル:
/.config/autostar/terminator-wallpaper-1a.desktop
/.config/autostar/terminator-wallpaper-1b.desktop
/.config/autostar/terminator-wallpaper-2a.desktop
これは私には過度に複雑でエレガントでないことを静めるように思えますが、それを行うためのより良い方法は見当たりませんでした。
さて、@ Suchipiの指示に従うと、次のようになります。
1)devilspie
のある部分 正常に動作します。結局のところ、8つのウィンドウすべてをカバーする定義が1つだけ必要です(matches
に置き換えます) is
です ):
$ cat .devilspie/terminator.ds
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)
そして私はobxprop
で見ることができます 期待どおりに機能すること。
$ obxprop | egrep '(_OB_APP|_NET_WM_WINDOW_TYPE)'
_OB_APP_TYPE(UTF8_STRING) = "normal"
_OB_APP_TITLE(UTF8_STRING) = "None"
_OB_APP_CLASS(UTF8_STRING) = "Terminator-wallpaper-1"
_OB_APP_NAME(UTF8_STRING) = "terminator-wallpaper-1"
_OB_APP_ROLE(UTF8_STRING) =
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DESKTOP
2)xdotool
の部分になりました もっとトリッキーです:
まず、100%
を使用します 解像度が機能しない、つまりウィンドウが消える(表示されない)ためです。静的を使用する場合:
xdotool search --class "Terminator-wallpaper-1a" windowunmap --sync windowmap windowsize %1 1920 1056
これはデスクトップ1モニター1で機能します。ただし、他のデスクトップで実行しても効果はありません。つまり、次のようになります。
xdotool search --class "Terminator-wallpaper-2a" windowunmap --sync windowmap windowsize %1 1920 1056
実際には、他のデスクトップでも機能しますが、xdotool
を実行した場合に限ります。 影響を与えたい特定のデスクトップ上のコマンド。つまり、デスクトップの2
に切り替える必要があります xdotool search --class "Terminator-wallpaper-2a"
を実行します そしてそれは機能します。
また、windowsize %1
かどうか疑問に思いました ここで任意の役割を果たします。
更新2019-12-07:
そのため、Debian Buster(Openbox 3.6)で同じシステムをセットアップしようとしていますが、新しい問題が発生しています。新しいバージョンのopenboxで一部のプロパティが変更されたと思われます。
すべてが以前と同じように見えます。つまり:
terminator-wallpaper-1a --profile wallpaper -b &
terminator-wallpaper-1b --profile wallpaper -b &
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
私は壁紙として2つの端末を取得します。しかし問題は、これらの端末の1つだけが実際に使用できることです。もう1つは「焦点が合っていない」ため、マウスでクリックしても焦点を合わせることができません。つまり、端末は表示されますが、入力できません。
関連:2つのWANからのメールを受け入れるようにpostfixを設定しますか?この問題は、以前のOpenboxバージョンでは存在しませんでした
この問題を解決するにはどうすればよいですか?
承認された回答:
Openboxは、_OB_APP_TYPE
のウィンドウに探している機能を提供します プロパティは「デスクトップ」に設定されています(obxprop
を使用できます ウィンドウのプロパティを確認します。
したがって、_OB_APP_TYPE
を設定する必要があります。 これが発生するように、ターミネータウィンドウを「デスクトップ」に設定します。
client.c
にあるオープンボックスのソースコードを読む _OB_APP_TYPE
が表示されました _NET_WM_WINDOW_TYPE
から継承されます 。そこで、_NET_WM_WINDOW_TYPE
を変更できるアプリケーションを探しました。 。私が見つけたアプリケーションはdevilspie
と呼ばれています 。
まず、インストールします:
sudo apt-get install devilspie
次に、devilspie
のフォルダを作成します 構成ファイル:
mkdir ~/.devilspie
次に、devilspie
に通知する構成ファイルを追加します。 terminator
という名前のアプリケーションを探す それらのウィンドウタイプをdesktop
に設定します 。以下を~/.devilspie/terminator.ds
に入れます :
(if
(is (application_name) "terminator")
(begin
(wintype "desktop")
)
)
ここで、devilspie
を実行すると (またはdevilspie -a
新しく作成されたウィンドウではなく、既存のウィンドウに影響を与えるため)obxprop
を使用すると気付くでしょう _NET_WM_WINDOW_TYPE
のターミネータ 変更されましたが、_OB_APP_TYPE
まだやっていない。 xdotool
を使用しましょう ウィンドウのマッピングを解除して再マッピングします(X11の用語では、これは描画を停止してウィンドウの描画を開始することを意味します)。これにより、openboxは値を認識します。
xdotoolをインストールします:
sudo apt-get install xdotool
次に、次のスクリプトを実行して、terminator
を見つけます。 ウィンドウを開き、マップを解除し、マップが解除されるまで待ってから、再マップします。また、ウィンドウのサイズを変更したのは、マップを解除して再マップすると、最大化が失われたためです。
xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768
1024 768
を置き換えます あなたの決意で。 xdotool
の新しいバージョンにも注意してください 100% 100%
を使用したDebianのaptリポジトリサポートにあるものよりも 静的な解像度の代わりに。 .deb
を見つけることができます xdotool
の新しいバージョンのパッケージ xdotoolのgooglecodeページで。
ターミネーターウィンドウはすぐに装飾されなくなります。ここでobxprop
を使用すると 、両方の値が正しく設定されていることがわかります。ここでバインドしたキーを押すと、ToggleShowDesktop
数回まで、ターミネータウィンドウは常にアクティブなままです。
これを永続的にするには、ログイン時にこれらのコマンドを実行する必要があります。 LXSessionのLXDEWikiページには、これを行うためのいくつかの異なる方法(グローバル、ユーザーごと、プロファイルごとなど)が示されています。ユーザー専用でLXDEプロファイル(デフォルト)でこれらの設定が必要な場合は、~/.config/lxsession/LXDE/autostart
を編集する必要があります。 実行したコマンドを追加します。ターミネーターのウィンドウがレンダリングされた後にxdotoolコマンドを実行する必要があることに注意してください。したがって、(sleep 1s & xdotool ...)
のように実行します。 。必要に応じて、これらのコマンドをopenboxのキーバインドとして設定することもできます。