我设置 Xfce 使所有窗口在没有鼠标焦点时变为半透明。如何设置特定窗口在不活动时保持不透明? Xfce 没有更改特定窗口设置的选项(据我所知)。
我以前找到过这个问题的解决方案,但现在找不到了。我使用命令行程序在我想要的窗口上设置特定的窗口管理器提示,这阻止了窗口变得透明。但我不记得我使用的程序或窗口管理器提示的名称。我认为提示名称的一部分可能是LOCKED
.
例如,这对于防止 GIMP 窗口在失去鼠标焦点时变得透明非常有用。
我有transset-df
,但它没有办法强制窗口在不活动时保持相同的透明度。
答案1
使用恶魔间谍2将窗口类型设置为“实用程序”以供选择性应用程序使用。该窗口类型不会受到 Xfce 环境中“非活动窗口的不透明度”的影响。
初步设置
从存储库安装 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
.文件名可以是任何名称,但必须具有.lua
文件扩展名才能与 Devilspie2 一起使用。
初步测试
在调试模式下运行 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 终端在两个窗口均处于非活动状态时仍然不透明(左侧)。
Dictionary 的非活动窗口仍然完全不透明,因为相对于配置文件,Devilspie2 已将窗口类型更改为“实用程序”。
修改设置
debug_print
创建的配置文件包含以显示“窗口名称:...应用程序名称:...”的调试消息开头的前两行。这些行允许 Devilspie2 显示当前运行的应用程序和随后运行的应用程序的各自名称。
根据调试消息,用户应执行以下步骤:
确定选择的应用程序,该应用程序在不活动时需要完全不透明。查找包含它的行
Application name:
并复制该值。/home/USERNAME/.config/devilspie2/opaque.lua
使用文本编辑器打开相同的配置文件,然后替换xfce4-dict
为所选的应用程序。保存文件。
退出并再次运行 Devilspie2。
请注意,USERNAME 指的是当前用户名。
修改后的配置现已生效。如果选择的应用程序已在运行,请来回切换窗口,以便在窗口再次变为非活动状态时查看有效的更改。
持久设置:Devilspie2 必须在后台运行,此解决方案才能对每个会话有效。要使其持久化,请devilspie2
在“会话和启动”中的“应用程序自动启动”选项卡下添加。
什么窗型
最初,我在玩 Devilspie2 时通过试验和错误找到了这个解决方案。后来我尝试运行 GIMP 2.8,发现主窗口在不活动时变得不那么不透明,但其他两个浮动窗口仍然完全不透明。
然后我通过运行确认了窗口类型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的建议做了,但这是另一种在窗口不活动时自动保持窗口不透明的方法:
我的存储库只有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。然后,该脚本xprop
针对每个窗口 ID 运行,设置_NET_WM_WINDOW_OPACITY_LOCKED
属性。
最后,我在启动 Xfce 之前将其添加到我的 .xinitrc 中:
$HOME/devilspie_xprop &
我最终决定我更喜欢 Clearkimura 的解决方案,但其中任何一个都有效。