deepin-terminal右键弹出菜单点击左键无法消失,如何跨桌面环境解决?
问题成因
deepin-terminal是深度桌面环境(DDE)的原生终端组件,设计开发阶段默认绑定了DDE窗口管理器的输入事件分发规则:
- DDE窗口管理器内置了右键菜单全局交互逻辑,所有DDE原生组件弹出的右键菜单,都会默认响应「非菜单区域左键点击关闭」操作,该逻辑由窗口管理器统一实现,未内置在deepin-terminal本体代码中
- Gnome、Cinnamon等非DDE桌面环境的窗口管理器,未兼容深度定制的菜单事件回调规则,deepin-terminal弹出的右键菜单不会被识别为需要响应外部点击的临时悬浮组件,因此只有终端内部硬编码的Esc快捷键可以触发菜单关闭

跨桌面环境通用解决方案
- 方案一:使用打了社区补丁的修改版deepin-terminal
社区开发者已经提交了相关补丁,为deepin-terminal新增了独立的菜单事件监听能力,不再依赖桌面环境的窗口管理器逻辑,菜单弹出后会主动监听全局左键点击事件,若点击区域不在菜单范围内则自动关闭。你可以搜索适配Ubuntu 20.04的修改版deb包直接安装,也可以获取deepin-terminal官方源码合并补丁后自行编译,通用编译步骤如下:# 安装编译依赖 sudo apt build-dep deepin-terminal # 进入源码目录后执行编译流程 mkdir build && cd build cmake .. make -j$(nproc) sudo make install - 方案二:通过全局鼠标事件绑定工具实现兼容
安装xbindkeys和xdotool工具,自定义全局事件规则,监测到deepin-terminal右键菜单处于弹出状态时,点击非菜单区域自动模拟Esc按键触发关闭,配置步骤如下:# 安装依赖工具 sudo apt install xbindkeys xdotool # 写入事件匹配规则 echo '"/usr/bin/xdotool search --class deepin-terminal windowactivate --sync key Escape"' >> ~/.xbindkeysrc # 重启xbindkeys进程使规则生效 killall xbindkeys && xbindkeys - 方案三:使用跨桌面兼容的GTK变体版本
深度官方维护了剥离DDE依赖的终端变体deepin-terminal-gtk,所有交互组件均采用GTK原生规范实现,右键菜单逻辑完全符合跨桌面通用标准,在Gnome、Cinnamon等所有桌面环境下都可以正常响应外部左键点击关闭操作,直接通过apt安装即可使用。
内容的提问来源于stack exchange,提问作者Mario Palumbo
相关产品推荐
相关产品推荐

