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

如何通过systemd脚本实现GNOME桌面开机及休眠恢复后自动通过以太网连接VPN?

如何通过systemd脚本实现GNOME桌面开机及休眠恢复后自动通过以太网连接VPN?

我之前用GNOME的时候,被VPN自动连接的问题折腾坏了——不管是开机启动,还是从S3休眠恢复后,VPN都没法自动连上。我调过密码权限、改了连接可用性,试了各种办法都没用。更离谱的是,如果我把所有连接和密码都设为对所有用户可用,开机后系统显示VPN连上了,但我登录后却完全没法解析域名、打不开任何网页,必须手动重启VPN才行。而且折腾权限的过程中,休眠恢复后的自动重连也彻底失效了。

后来我自己写了个简单的systemd脚本,配合几个关键的网络配置调整,终于把这个问题解决了。在创建systemd服务之前,你得先把这些配置项检查好:

  • 打开GNOME的「设置」→「网络」,找到你的VPN连接,点击右侧的齿轮图标进入详情页
  • 切换到「常规」标签,勾选「自动连接到这个网络」和「在可用时自动连接」
  • 切换到「身份验证」标签,确保密码已经正确保存;如果之前全用户权限有问题,可以先只勾选「对当前用户可用」,后续再根据情况调整
  • 同时确认你的以太网连接也设置了自动连接,毕竟VPN得依赖基础网络才行

接下来就是创建systemd服务脚本了:

  1. 先新建一个服务文件,用你习惯的编辑器打开就行,比如:
sudo nano /etc/systemd/system/vpn-auto-connect.service
  1. 把下面的内容粘贴进去,记得把YOUR_VPN_CONNECTION_NAME换成你实际的VPN连接名称(就是GNOME网络设置里显示的名字),YOUR_ETHERNET_INTERFACE换成你的以太网接口名(可以用ip addr命令查看,一般是enp0s3这类):
[Unit]
Description=自动连接VPN(开机及休眠恢复后)
After=network.target suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

[Service]
Type=oneshot
ExecStart=/usr/bin/nmcli connection up "YOUR_VPN_CONNECTION_NAME" ifname "YOUR_ETHERNET_INTERFACE"
ExecStartPost=/bin/sleep 2
ExecStartPost=/usr/bin/nmcli connection reload
Restart=on-failure

[Install]
WantedBy=multi-user.target suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
  1. 保存退出后,重新加载systemd的配置文件,让它识别这个新服务:
sudo systemctl daemon-reload
  1. 最后启用这个服务,这样它就会在开机时自动运行,而且每次从休眠/唤醒状态恢复时也会触发:
sudo systemctl enable vpn-auto-connect.service

这个脚本的原理其实很简单——就是绕开GNOME自带的自动连接机制,直接用NetworkManager的命令行工具nmcli在网络就绪后手动触发VPN连接,还加了2秒延迟确保网络稳定,最后重新加载连接配置,完美解决了之前的解析失败和自动连不上的问题。我用了之后,不管开机还是休眠恢复,VPN都能正常自动连上,再也没出过毛病。

备注:内容来源于stack exchange,提问作者Nicholas Stommel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:12:46