非アクティブ状態でウィンドウを不透明に保つ方法は?

非アクティブ状態でウィンドウを不透明に保つ方法は?

マウスフォーカスがないときにすべてのウィンドウが半透明になるようにXfceを設定しました。非アクティブな状態で特定のウィンドウを不透明に保つように設定するにはどうすればよいですか? Xfceには(私が知る限り)特定のウィンドウ設定を変更するオプションはありません。

以前はこの問題の解決策を見つけましたが、今は見つかりませんでした。私はコマンドラインプログラムを使って目的のウィンドウに特定のウィンドウマネージャプロンプトを設定しました。これはウィンドウが透明になるのを防ぎます。しかし、私が使用したプログラム名やウィンドウマネージャのプロンプトは覚えていません。プロンプト名の一部がLOCKED

例えば、これは、マウスの焦点が失われたときにGIMPウィンドウが透明になるのを防ぐのに有用である。

持っていますが、transset-df非アクティブな状態でウィンドウが同じ透明度を維持するように強制する方法はありません。

答え1

使用悪魔のスパイ2オプションのアプリケーションでは、ウィンドウタイプを「ユーティリティ」に設定します。このウィンドウタイプは、Xfce環境の「非アクティブウィンドウの不透明度」の影響を受けません。

初期設定

リポジトリからDevilspie2をインストールします(次の場所で利用可能)。ダーバンそしてUbuntu$HOME/.config/devilspie2リポジトリ)を選択した後、次の内容で新しい設定ファイルを作成します。

debug_print("Window Name: " .. get_window_name());
debug_print("Application name: " .. get_application_name());

if (get_application_name()=="xfce4-dict") then
   set_window_type "_NET_WM_WINDOW_TYPE_UTILITY";
end

ファイル名は何でも可能ですが、Devilspie2で使用できるファイル拡張子をopaque.lua持つ必要があります。.lua

予備テスト

Devilspie2をデバッグモードで実行すると、次の内容が表示されます。

$  devilspie2 -d
Running devilspie2 in debug mode.

Using scripts from folder: /home/USERNAME/.config/devilspie2
------------
List of LUA files handling "window_open" events in folder:
/home/USERNAME/.config/devilspie2/opaque.lua
List of LUA files handling "window_close" events in folder:
------------
Window Name: Desktop
Application name: xfdesktop
Window Name: xfce4-panel
Application name: xfce4-panel
Window Name: Application Finder
Application name: xfrun4
Window Name: Dictionary
Application name: xfce4-dict

次のスクリーンショットは、Devilspie2の実行前後の事前非アクティブウィンドウを示しています。辞書(下)の不透明度は変わりますが、両方のウィンドウが無効になっていると、Xfce端末は不透明(左)のままになります。

Devilspie2がなければ、辞書はあまり不透明になります。

Devilspie2を使用して辞書を完全に不透明にする

Devilspie2がプロファイルに基づいてウィンドウタイプを「ユーティリティ」に変更したため、辞書の非アクティブウィンドウは完全に不透明なままです。

設定の変更

debug_print生成された構成ファイルには、「ウィンドウ名:...アプリケーション名:...」を示すデバッグメッセージで始まる最初の2行が含まれています。この行を使用すると、Devilspie2は現在実行中のアプリケーションと後続の実行アプリケーションの各名前を表示できます。

デバッグメッセージに応じて、ユーザーは次の手順を実行する必要があります。

  1. 非アクティブのときに完全に不透明でなければならない選択したアプリケーションを決定します。その行を見つけてApplication name:値をコピーします。

  2. /home/USERNAME/.config/devilspie2/opaque.luaテキストエディタを使用して同じ設定ファイルを開き、xfce4-dict選択したアプリケーションに置き換えます。

  3. 文書を保存します。

  4. 終了してDevilspie2を再実行してください。

USERNAME は現在のユーザー名を示します。

これで、変更された構成が適用されます。選択したアプリケーションがすでに実行されている場合は、ウィンドウを前後に切り替えると、ウィンドウが再び無効になったときに適用される変更を確認できます。

永久設定:Devilspie2がセッションごとに機能するには、このソリューションをバックグラウンドで実行している必要があります。これを継続的に作成するには、devilspie2「セッションと起動」の「アプリケーションの自動起動」タブの下に追加してください。

どのウィンドウタイプ

もともとDevilspie2をプレイしながら試行錯誤を経てこのソリューションを見つけました。後でGIMP 2.8を実行してみると、メインウィンドウは非アクティブのときにあまり不透明になりましたが、他の2つのフローティングウィンドウは完全に不透明になりました。

次に、を実行してウィンドウの種類を確認し、フローティングウィンドウのいずれかをクリックxwininfoすると、ウィンドウマネージャのプロンプトが表示されます。

$ xwininfo -wm

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x2a00686 "Layers - Brushes"

  Window manager hints:
      Client accepts input or input focus: Yes
      Initial state is Normal State
      Displayed on desktop 1
      Window type:
          Utility
      Window state:
          Skip Pager
          Skip Taskbar
      Process id: 5262 on host XXXXX
      Frame extents: 1, 1, 22, 4

ビンゴ、窓のタイプはさすが「ユーティリティ」です!

マイナーな質問:「ユーティリティ」ウィンドウタイプは、アプリケーションウィンドウがタスクバーに表示されなくなるという点で動作が異なります。ユーザーはタスクバーの代わりにAlt+キーを使用して引き続きナビゲートできます。Tab

この動作はユーティリティウィンドウタイプで一般的であり、フローティングウィンドウ(例えば、GIMPのドッキング)でも同様に観察できます。

ユーザーがこの動作が望ましくないと思う場合は、ウィンドウの種類を変更するのが誤った解決策である可能性があります。一方、この動作は、非アクティブな状態でオプションのウィンドウを不透明に保つ機能とともに、マイナーな問題です。

Devilspie2 v0.31を使用してXubuntu 14.04(Xfce 4.10)でテストされました。

答え2

Clearkimuraの回答を調べていたところ、以前はウィンドウを不透明に保つために使用した方法が見つかりました。端末に次のコマンドを入力し、目的のウィンドウをクリックします。

xprop -f _NET_WM_WINDOW_OPACITY_LOCKED 32c -set _NET_WM_WINDOW_OPACITY_LOCKED 1

これは、ウィンドウがアクティブになったときにXfceにウィンドウの不透明度を維持させるウィンドウプロパティを設定します。

私はClearkimuraが提案したようにしましたが、非アクティブなときにウィンドウを自動的に不透明に保つ別の方法があります。

私のリポジトリにはDevilspie2ではなくDevilspieしかありません。私はこのDevilspie設定ファイルを作成して名前を付けました~/.devilspie/rules.ds(説明はセミコロンで始まります)。

(begin
    ;(debug)
    (if
        ; For mplayer/smplayer and all Gimp windows:
        (or
            (contains (application_name) "MPlayer")
            (contains (window_class) "Gimp")
        )
        ; comment out one of the lines below:
        (print (window_xid) "\n") ; print the window IDs
        ; (wintype "utility") ; set the window type to utility
    )
)

その後、このスクリプトを作成し、名前をとして指定し、devilspie_xpropホームディレクトリに配置しました。

#!/bin/bash
devilspie $@ | while read id text; do
    if [[ $id -gt 0 && $text == "" ]]; then
        xprop -id $id -f _NET_WM_WINDOW_OPACITY_LOCKED 32c -set _NET_WM_WINDOW_OPACITY_LOCKED 1
    else
        echo "$id $text"
    fi
done

DevilspieはGimpまたはMPlayer / SMPlayerウィンドウのウィンドウIDを印刷します。その後、スクリプトはウィンドウxpropIDごとに実行され、_NET_WM_WINDOW_OPACITY_LOCKEDプロパティを設定します。

最後に、Xfceを起動する前にこれを.xinitrcに追加しました:

$HOME/devilspie_xprop &

私は最終的にClearkimuraの解決策を好むことに決めましたが、どちらかが機能します。

関連情報