GNU/Linux >> Linux の 問題 >  >> Linux

指定されたレイヤーでのみ動作するようにOpenboxでToggleshowdesktopを構成しますか?

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のキーバインドとして設定することもできます。

関連:セマフォ/ロックとして使用できるUnixコマンドは何ですか?
Linux
  1. 静的IPアドレス用にデスクトップを構成する方法は?

  2. grep は指定された範囲内の行のみに一致します

  3. ゲスト ブリッジ トラフィックをブロックするように KVM ホストで IPTables を構成する

  1. CentOS 6 /RHEL6でVNCを構成する

  2. LinuxデスクトップにPuttySSHクライアントをインストールして構成する方法

  3. スイッチではなくハブとして機能するようにLinuxブリッジを構成する方法

  1. Linuxデスクトップ用にOpenboxを設定する方法

  2. キーボードだけでGNOMELinuxデスクトップをナビゲートする方法

  3. 構成コマンドを実行できません:「そのようなファイルまたはディレクトリはありません」?