如何使openconnect绑定快捷键后关闭终端仍保持后台运行
解决终端退出后OpenConnect保持后台运行的问题
方案一:用nohup脱离终端(最直接)
修改.xbindkeysrc里的绑定命令为:
"gnome-terminal -- bash -c 'keepassxc-cli show -q -s my-vpn-db.kdbx \"VPN Entry\" | nohup openconnect vpn.example.com >/dev/null 2>&1 &; exit'"
bash -c用来整合多步命令,把密码读取、VPN启动和终端退出操作串在一起nohup让OpenConnect忽略终端关闭时发送的终止信号,确保进程持续运行>/dev/null 2>&1丢弃所有输出和错误信息,避免生成冗余的nohup.out文件&将OpenConnect放到后台执行exit让终端完成命令后立刻关闭
如果你的VPN需要指定vpnc-script路径,补充--script参数即可:
"gnome-terminal -- bash -c 'keepassxc-cli show -q -s my-vpn-db.kdbx \"VPN Entry\" | nohup openconnect --script /usr/share/vpnc-scripts/vpnc-script vpn.example.com >/dev/null 2>&1 &; exit'"
方案二:用disown移除作业关联
如果不想用nohup,可以用disown把后台进程从shell作业列表中移除,终端关闭时就不会向它发送终止信号:
"gnome-terminal -- bash -c 'keepassxc-cli show -q -s my-vpn-db.kdbx \"VPN Entry\" | openconnect vpn.example.com >/dev/null 2>&1 & disown; exit'"
方案三:用Systemd用户服务管理(最稳定)
如果前两种方案仍有问题,推荐用Systemd用户服务完全脱离终端环境:
- 创建服务文件
~/.config/systemd/user/openconnect-vpn.service:
[Unit] Description=OpenConnect VPN连接 [Service] Type=simple ExecStart=/usr/bin/openconnect vpn.example.com ExecStop=/usr/bin/pkill openconnect StandardInput=file:%h/.cache/vpn-password.txt Restart=no [Install] WantedBy=default.target
- 修改
.xbindkeysrc的绑定命令:
"gnome-terminal -- bash -c 'keepassxc-cli show -q -s my-vpn-db.kdbx \"VPN Entry\" > ~/.cache/vpn-password.txt; systemctl --user start openconnect-vpn; rm ~/.cache/vpn-password.txt; exit'"
- 密码临时写入缓存文件,服务读取后立即删除,避免泄露
- Systemd会独立管理OpenConnect进程,完全不受终端生命周期影响
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

