Xfceを設定して、マウスフォーカスがないときにすべてのウィンドウを半透明にします。非アクティブのときに特定のウィンドウを不透明のままに設定するにはどうすればよいですか? Xfceには、特定のウィンドウの設定を変更するオプションがありません(私が知る限り)。
以前にこれに対する解決策を見つけましたが、もう見つかりません。コマンドラインプログラムを使用して、必要なウィンドウに特定のウィンドウマネージャーのヒントを設定しました。これにより、ウィンドウが透明になるのを防ぎました。しかし、使用したプログラムやウィンドウマネージャーのヒントの名前を思い出せません。ヒント名の一部はLOCKED
だったと思います。
これは、GIMPウィンドウがマウスフォーカスを失ったときに透明にならないようにする場合などに役立ちます。
私が持っています transset-df
ただし、非アクティブのときにウィンドウに同じ透明度を維持させる方法はありません。
Devilspie2 を使用して、選択したアプリケーションのウィンドウタイプを「ユーティリティ」に設定します。このウィンドウタイプは、Xfce環境の「非アクティブなウィンドウの不透明度」の影響を受けません。
リポジトリ( Debian および bunt リポジトリで利用可能)からDevilspie2をインストールし、$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
ファイルをopaque.lua
として保存します。ファイル名は何でもかまいませんが、Devilspie2で機能するには、ファイル拡張子が.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を実行する前後のDictionaryの非アクティブなウィンドウを示しています。辞書(下)の不透明度は変化しますが、両方のウィンドウが非アクティブである間、Xfceターミナルの不透明度は低くなります(左)。
ディクショナリの非アクティブなウィンドウは、設定ファイルに関してDevilspie2によってウィンドウタイプが「ユーティリティ」に変更されたため、完全に不透明なままでした。
作成された構成ファイルには、「ウィンドウ名:...アプリケーション名:...」のデバッグメッセージを表示するために、debug_print
で始まる最初の2行が含まれています。これらの行により、Devilspie2は、現在実行中のアプリケーションとその後実行中のアプリケーションの両方のそれぞれの名前を表示できます。
デバッグメッセージに基づいて、ユーザーは次の手順に従う必要があります。
選択したアプリケーションを特定します。非アクティブの場合は完全に不透明にする必要があります。 Application name:
を含む行を探し、値をコピーします。
テキストエディタを使用して/home/USERNAME/.config/devilspie2/opaque.lua
で同じ構成ファイルを開き、xfce4-dict
を選択したアプリケーションに置き換えます。
ファイルを保存します。
終了して、Devilspie2を再度実行します。
USERNAMEは現在のユーザー名を参照していることに注意してください。
変更された構成が有効になります。選択したアプリケーションがすでに実行されている場合は、ウィンドウを前後に切り替えて、ウィンドウが再び非アクティブになったときに効果的な変更を確認します。
永続的なセットアップ:このソリューションをすべてのセッションで有効にするには、Devilspie2をバックグラウンドで実行する必要があります。これを永続的にするには、[セッションと起動]の[アプリケーションの自動起動]タブにdevilspie2
を追加します。
当初、試行錯誤しながらDevilspie2で遊んでいたときにこの解決策を見つけました。後でGIMP2.8を実行してみたところ、非アクティブになるとメインウィンドウの不透明度が低くなりましたが、他の2つのフローティングウィンドウは完全に不透明なままでした。
次に、xwininfo
を実行してウィンドウの種類を確認し、フローティングウィンドウの1つをクリックして、ウィンドウマネージャーのヒントを出力しました。
$ 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
そしてビンゴ、ウィンドウタイプは確かに「ユーティリティ」でした!
重要な問題:「ユーティリティ」ウィンドウタイプには1つの異なる動作があります。つまり、アプリケーションウィンドウはタスクバーに表示されなくなります。ユーザーは引き続きナビゲートできます Alt+Tab タスクバーの代わりにキー。
この動作は、「ユーティリティ」ウィンドウタイプでは正常です。これは、GIMPのドックとも呼ばれるフローティングウィンドウでも同じように観察できます。
この動作が望ましくないとユーザーが感じた場合、ウィンドウタイプを変更することは、欠点のある解決策になる可能性があります。一方、非アクティブのときに選択ウィンドウを不透明に保つことができる一方で、動作は些細な問題です。
Devilspie2 v0.31を使用して、Xubuntu 14.04(Xfce 4.10)での動作をテストしました。
Clearkimuraの回答を調べているときに、ウィンドウを不透明に保つために以前使用していた方法を見つけました。ターミナルでこのコマンドを入力し、目的のウィンドウをクリックします。
xprop -f _NET_WM_WINDOW_OPACITY_LOCKED 32c -set _NET_WM_WINDOW_OPACITY_LOCKED 1
これにより、ウィンドウがアクティブになったときにXfceがウィンドウの不透明度を変更しないようにするウィンドウプロパティが設定されます。
Clearkimuraが提案したことを実行することになりましたが、これは、ウィンドウが非アクティブのときにウィンドウを自動的に不透明に保つ別の方法です。
私のリポジトリにはdevilspieのみがあり、devilspie2はありません。この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を出力します。次に、スクリプトはウィンドウIDごとにxprop
を実行し、_NET_WM_WINDOW_OPACITY_LOCKED
プロパティを設定します。
最後に、Xfceを起動する前に、これを.xinitrcに追加しました。
$HOME/devilspie_xprop &
最終的に、clearkimuraのソリューションの方が好きだと判断しましたが、どちらでも機能します。