Ubuntu 22.04下如何通过Bash脚本启动应用且不打开终端窗口?
Ubuntu 22.04下如何通过Bash脚本启动应用且不打开终端窗口?
我来帮你搞定这两个问题,都是Ubuntu下GUI应用后台启动的常见小坑:
第一个问题:直接运行脚本时不弹出终端窗口
你现在双击脚本会弹出终端,是因为Ubuntu默认会用终端来执行bash脚本。要让QBittorrent完全脱离终端启动,可以试试这两种方法:
方法1:修改脚本,用nohup或setsid让应用彻底后台运行
把你的脚本改成下面这样,就算脚本通过终端执行,也会让QBittorrent和终端完全分离:
#!/bin/bash # 用nohup让应用脱离终端,重定向所有输出避免生成nohup.out文件 nohup /usr/bin/qbittorrent &>/dev/null &
或者用setsid(它会创建全新的会话,彻底和当前终端划清界限):
#!/bin/bash setsid /usr/bin/qbittorrent &>/dev/null &
方法2:创建桌面快捷方式(.desktop文件)
如果只是双击脚本才弹终端,更稳妥的方式是做个桌面快捷方式,让系统直接执行脚本而不启动终端:
- 创建一个名为
qbittorrent-silent.desktop的文件,内容如下:
[Desktop Entry] Type=Application Name=QBittorrent 静默启动 Exec=/path/to/your/script.sh # 替换成你实际的脚本路径 Terminal=false # 关键设置:false就不会打开终端 Icon=qbittorrent
- 给这个文件添加执行权限:
chmod +x qbittorrent-silent.desktop
之后双击这个快捷方式,就能直接启动QBittorrent,完全看不到终端窗口。
第二个问题:VPN连接后脚本无法启动应用
TorGuard在VPN连接时运行脚本没反应,大概率是因为脚本运行时缺少GUI应用必需的环境变量(DISPLAY和XAUTHORITY)——VPN服务可能是以root或其他非当前桌面用户的身份执行脚本,没法访问你的桌面会话。
解决方法是在脚本里手动指定这些环境变量,或者切换到当前登录的桌面用户执行:
方案1:手动设置环境变量
把脚本改成这样(记得把your-username换成你的实际用户名,比如ubuntu):
#!/bin/bash # 指定桌面会话的DISPLAY(Ubuntu默认是:0) export DISPLAY=:0 # 指定当前用户的XAUTHORITY文件路径 export XAUTHORITY=/home/your-username/.Xauthority # 后台启动QBittorrent nohup /usr/bin/qbittorrent &>/dev/null &
方案2:自动切换到当前桌面用户执行
如果想让脚本更通用,不用手动填用户名,可以自动获取当前登录到桌面的用户,再切换过去执行:
#!/bin/bash # 获取当前登录到:0桌面会话的用户 DESKTOP_USER=$(who | grep "(:0)" | awk '{print $1}') # 切换到该用户,启动QBittorrent su $DESKTOP_USER -c 'nohup /usr/bin/qbittorrent &>/dev/null &'
最后别忘了给脚本加执行权限:
chmod +x /path/to/your/script.sh
备注:内容来源于stack exchange,提问作者fatman
相关产品推荐
相关产品推荐

