キーバインディングがありますToggleShowDesktop
。を押すと、Menuすべてのウィンドウが最小化され、デスクトップの背景パターンが期待どおりに表示されます。
<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つの仮想デスクトップがあります。だから私は埋める「8つの壁紙」を持っていますterminator
。以前に読んだ内容に基づいて、8つのウィンドウを区別できる必要があると仮定して、8つのterminator
.ieシンボルを作成しました。
/usr/bin/terminator-wallpaper-1a -> terminator
/usr/bin/terminator-wallpaper-1b -> terminator
/usr/bin/terminator-wallpaper-2a -> terminator
...
実際、8つの異なるアプリケーション(異なる名前を含む)が作成されました。
同様に.config/openbox/lxde-rc.xml
、Iには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
私の考えでは、これはあまりにも複雑でエレガントではないようですが、これより良い方法はありません。
今@Suchpiの指示に従って、次のことが起こります。
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つだけが実際に使用できることです。もう一つは「無焦点」なのにマウスでクリックしても焦点が合いません。つまり、端末は見えますが、入力することはできません。
この問題は以前のOpenboxバージョンでは存在しませんでした。
この問題をどのように解決できますか?
答え1
_OB_APP_TYPE
Openboxは、プロパティが「デスクトップ」に設定されているウィンドウに対してあなたが探している機能を提供します(obxprop
ウィンドウのプロパティを調べるために使用できます)。そのためには、_OB_APP_TYPE
終了者ウィンドウを「デスクトップ」に設定する必要があります。
openboxのソースコードを読ん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
ターミネータが使用されたことがわかります。ウィンドウのマッピングを解除して再マッピングしてみましょう(X11という用語で、これは描画を停止してウィンドウの描画を開始することを意味します)。これにより、openboxはこの値を認識します。_NET_WM_WINDOW_TYPE
_OB_APP_TYPE
xdotool
xdotoolをインストールします。
sudo apt-get install xdotool
次に、次のスクリプトを実行してterminator
ウィンドウを見つけてマッピングを解除し、マッピングが解放されるのを待ってから再マップします。また、マッピングを解除して再マッピングすると最大化が失われたため、ウィンドウのサイズを変更しました。
xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768
1024 768
あなたの決心に変えなさい 。また、xdotool
Debian apt repoのバージョンよりも最新のバージョンは、静的100% 100%
解析の代わりに使用をサポートしています。最新バージョンの.deb
パッケージで最新バージョンを見つけることができます。xdotool
xdotoolのgooglecodeページ。
終了者ウィンドウはすぐに装飾されていない状態に変わります。今すぐ使用すると、両方のobxprop
値が正しく設定されていることがわかります。今バウンドキーを数回押すと、終端ToggleShowDesktop
ウィンドウは常にアクティブになります。
これを永久にするには、ログイン時に次のコマンドを実行する必要があります。これLXSessionのLXDE Wikiページこれを行ういくつかの方法(グローバル、ユーザー別、プロファイル別など)を示します。これらの設定をユーザーにのみ適用し、LXDEプロファイル(デフォルト)の下で実行~/.config/lxsession/LXDE/autostart
するコマンドを編集して追加する必要があると仮定すると、ターミネータウィンドウをレンダリングした後にxdotoolコマンドを実行する必要があることに注意してください(sleep 1s & xdotool ...)
。必要に応じて、これらのコマンドをopenboxのキーバインディングとして設定することもできます。
答え2
問題を解決できるような次のスクリプトを思いつきました。
#!/bin/sh
make_wid_desktop_app() {
# set the type of the window to
xprop -id $1 -f _NET_WM_WINDOW_TYPE 32a -set _NET_WM_WINDOW_TYPE _NET_WM_WINDOW_TYPE_DESKTOP
xprop -id $1 -f _MOTIF_WM_HINTS 32c -set _MOTIF_WM_HINTS 0
xprop -id $1 -remove _MOTIF_WM_HINTS
}
get_wids() {
xdotool search --class $1
}
for id in $(get_wids $1); do
make_wid_desktop_app $id;
done
このように使用してください。
desktop_terminal terminator-wallpaper
terminator-wallpaper
withクラスを含むすべてのウィンドウを検索してwithにxdotools
変更します。_NET_WM_WINDOW_TYPE
_NET_WM_WINDOW_TYPE_DESKTOP
xprop
Openboxはウィンドウを作成した後にこのタイプが変更されたことを確認しないため、Openboxをだましてこれを行う必要があります。これは_MOTIF_WM_HINTS
設定と削除によって行われます。
devilspie
追加しても同じ効果が得られます。
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
(undecorate)
)
)
ウィンドウをに設定するのもトリック(undecorate)
だからです。_MOTIF_WM_HINTS
答え3
質問に正しく答えた場合、問題は次のとおりです。をクリックするたびに、を除いて開いているToggleShowDesktop
すべてのアプリケーションを最小化しようとしますterminator
。
その場合は、内部的に2つのコマンドを呼び出すラッパースクリプトを作成してこれを達成できます。
#!/bin/sh
xdotool key "super+d"
wmctrl -a "terminator"
実際のToggleShowDesktopバイナリ/スクリプトを上記のラッパースクリプトに置き換えます。
汚れて見えるかもしれませんが、うまくいきます。