You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu GNOME下启动自定义终端应用出现双窗口的问题

问题分析与解决方案

你的问题根源有两处:

  • .desktop 文件同时设置了 Terminal=true 和 Exec=x-terminal-emulator,导致GNOME先启动一个终端实例,该终端又执行 x-terminal-emulator 再开一个窗口,最终出现双终端。
  • 窗口未关联自定义图标,是因为缺少 StartupWMClass 配置,且 Terminal=true 会让系统将窗口归类到默认终端的应用组。

1. 修复双终端窗口问题

修改 .desktop 文件,将 Terminal=true 改为 Terminal=false——你已经在 Exec 中手动调用终端模拟器,无需GNOME额外启动终端。

2. 配置窗口与自定义图标关联

首先获取终端窗口的 WM_CLASS 属性:

  • 打开任意终端,运行命令:
    xprop WM_CLASS
    
  • 鼠标点击终端窗口,会输出类似内容:
    WM_CLASS(STRING) = "gnome-terminal", "Gnome-terminal"
    
    记录第二个值(如 Gnome-terminal)。

然后在 .desktop 文件中添加 StartupWMClass 项,值为刚才记录的字符串,同时删除 X-UnityGenerated=true(该配置针对Unity桌面,GNOME无需使用)。

3. 确保终端标题正确显示

调整 Exec 命令,避免变量展开问题,同时保证标题生效。以GNOME默认终端 gnome-terminal 为例,优化后的命令如下:

Exec=gnome-terminal --title "My App" --working-directory=/opt/my-app -e "bash -c '/opt/my-app/MyApp; exec bash'"
  • --working-directory 替代原 Path 项,配置更可靠
  • exec bash 替换 $SHELL,避免额外启动子进程,同时保证退出应用后终端保持打开

若坚持使用 x-terminal-emulator,需转义变量:

Exec=x-terminal-emulator --title "My App" --working-directory=/opt/my-app -e 'bash -c "/opt/my-app/MyApp; exec $SHELL"'

修改后的完整 .desktop 文件示例

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=My App
Icon=/opt/my-app/icon.png
Exec=gnome-terminal --title "My App" --working-directory=/opt/my-app -e "bash -c '/opt/my-app/MyApp; exec bash'"
StartupNotify=true
Terminal=false
StartupWMClass=Gnome-terminal
Categories=Utility

验证步骤

  1. 更新 .desktop 文件后,运行命令刷新桌面缓存:
    update-desktop-database ~/.local/share/applications/
    
  2. 启动应用,此时应只有一个终端窗口,标题显示为 "My App",且GNOME任务栏/概览中窗口会关联到你的自定义图标(仅显示一个圆点)。

内容的提问来源于stack exchange,提问作者user16891224

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:50:40