KDE桌面环境下有若干方法将KDE(QT)程序搞成半透明状态。比如利用kvantum。kvantum的介绍在一般人用 Linux 算是找虐吗?这篇回答中有涉及,这里就不再重复。
然而非QT程序一直没办法,这就造成一些不协调。就在昨天这个问题终于得到了解决。
devilspie
This tool will find windows as they are created and perform actionson them, such as resizing, moving to another workspace, or pinningthem to all workspaces.
其实远不及此
在ubuntu上可以这样安装
sudo apt install devilspie
之后新建一个配置文件目录:~/.devilspie/
在该目录中编写配置脚本,比如我这个:令vscode和phpstorm半透明并设置透明度
transparent.ds
(if (contains (window_class) "Code - Insiders")(begin(spawn_async (str "xprop -id " (window_xid) " -f _KDE_NET_WM_BLUR_BEHIND_REGION 32c -set _KDE_NET_WM_BLUR_BEHIND_REGION 0 "))(spawn_async (str "xprop -id " (window_xid) " -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY 0xdf300000") ))
)(if (contains (window_class) "jetbrains-phpstorm")(begin(spawn_async (str "xprop -id " (window_xid) " -f _KDE_NET_WM_BLUR_BEHIND_REGION 32c -set _KDE_NET_WM_BLUR_BEHIND_REGION 0 "))(spawn_async (str "xprop -id " (window_xid) " -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY 0xdfffffff") ))
)
至于为什么要这么写,我也不懂,方法是抄来的。这个脚本是什么语言?看起来是某种lisp?
重点是两处:
(if (contains (window_class) "Code - Insiders")
_NET_WM_WINDOW_OPACITY 0xdfffffff
window class 斜体处指定哪种窗口,OPACITY斜体处指定不透明度。
_KDE_NET_WM_BLUR_BEHIND_REGION这一行是KDE桌面特有的,可以指定模糊程度。使用其他桌面环境的,此行可以删除,或自行摸索有没有类似的设置项。
不透明度自己把握尺度。windows class可以这样获得:
终端执行:
鼠标会变成点选器,点击你的目标程序窗口,我的vscode是insider版本,因此结果会是这样:
后边的大写方式总是有效的,前边的小写方式原因不明的有时无效保存脚本之后终端执行devilspie,效果立即可见。
为了真正实用,我们可以把devilspie放在开机启动项。
另外,devilspie这个程序已经失去维护了,有人另外写了一个devilspie2,配置脚本用的lua,据说更加友好。但是我觉得差不多。。。
http://www.nongnu.org/devilspie2/www.nongnu.org
有闲工夫的可以研究一下。