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

如何使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用户服务完全脱离终端环境:

  1. 创建服务文件~/.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
  1. 修改.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:02:23