Gnome无法对ssh -X启动的应用窗口分组如何解决?
Gnome SSH X11转发应用窗口无法分组解决方案
核心原因
SSH X11转发启动的应用运行在远程主机,本地Gnome Shell无法将窗口与本地.desktop启动的SSH进程关联,即使设置了StartupWMClass,若远程应用返回的WM_CLASS属性与配置不匹配、或Gnome优先按进程归属匹配,就会出现无法分组的问题。
可行解决方法
方法1:启动时强制指定远程应用的WM_CLASS
多数GUI应用支持自定义WM_CLASS属性,确保与本地.desktop的StartupWMClass完全一致即可:
- Emacs:修改
.desktop的Exec行,给远程emacs命令加--name参数,示例:
同时在本地Exec=ssh -X user@remote-host "emacs --name Emacs".desktop中配置StartupWMClass=Emacs - PyCharm:编辑远程主机上PyCharm目录下的
bin/pycharm64.vmoptions(32位对应pycharm.vmoptions),新增两行配置:
本地--splash-screen-class JetBrains-pycharm --wm-class-name JetBrains-pycharm.desktop配置StartupWMClass=JetBrains-pycharm即可。
验证方式:本地执行
xprop WM_CLASS后点击远程应用窗口,可获取窗口实际的WM_CLASS值,需和配置完全匹配(大小写敏感)。
方法2:用devilspie2强制修正窗口属性
如果应用不支持自定义WM_CLASS,可通过本地工具强制修正窗口的WM_CLASS属性:
- 安装devilspie2:
- Debian/Ubuntu系:
sudo apt install devilspie2 - Fedora系:
sudo dnf install devilspie2
- Debian/Ubuntu系:
- 创建配置目录:
mkdir -p ~/.config/devilspie2 - 新增对应应用的配置文件,比如
~/.config/devilspie2/emacs.lua:
按同样逻辑添加PyCharm的配置,匹配窗口特征后设置为本地if string.find(get_window_name(), "Emacs") then set_window_class("Emacs") end.desktop对应的WM_CLASS值即可。 - 将devilspie2加入系统开机自启,后续所有匹配的窗口都会被自动修正属性,实现正常分组。
方法3:修改Gnome分组优先级
无需安装额外工具,修改Gnome配置让其优先按WM_CLASS而非进程归属分组:
gsettings set org.gnome.shell.window-switcher app-icon-mode 'wm-class'
配置生效后,只要窗口WM_CLASS与本地.desktop的StartupWMClass一致,就会自动分组。
内容的提问来源于stack exchange,提问作者amh
相关产品推荐
相关产品推荐

