我有一个简单的脚本,可以在登录时运行我的 VPN。该脚本位于
/etc/profile.d/connectVPN.sh
#!/bin/bash
protonvpn c -f > /home/myUserName/Desktop/out.txt
输出文件的内容:
[!] The program was not executed as root.
[!] Please run as root.
ls -l /etc/profile.d/connectVPN.sh
-rwxr-xr-x 1 root root 59 Dec 23 15:22 /etc/profile.d/connectVPN.sh
由于脚本未以 root 身份运行,因此 VPN 无法启动。我该如何修复此问题?
ls -lF /home/我的用户名/Desktop/out.txt
-rw-rw-r-- 1 measure measure 74 Dec 29 22:27 Desktop/out.txt
答案1
您可以尝试对您想要运行 VPN 的用户使用 sudo passwordless 执行 proton 命令;
通过编辑 /etc/sudoers.d/ 文件夹添加一个文件(任何名称都可以,例如 proton),其中包含以下条目(假设用户名是:措施protonvpn 的路径是/bin/protonvpn):
measure NOPASSWD: /bin/protonvpn
笔记:如果不正确,修改可执行文件路径和/或用户名
然后修改/etc/profile.d/connectVPN.sh从:
#!/bin/bash
protonvpn c -f > /home/myUserName/Desktop/out.txt
到:
#!/bin/bash
sudo /bin/protonvpn c -f > /home/myUserName/Desktop/out.txt
然后重试。
就我个人而言,如果 VPN 在系统启动时启动没有问题,我建议您使用 systemd 来管理它。
编辑 下面是一个示例,说明如何在网络连接后使用 systemd 管理脚本:
[Unit]
Description=Protonvpn
[Service]
Type=idle
# as root the sudo command can be removed.
ExecStart=/usr/bin/sudo /bin/protonvpn c -f > /home/myUserName/Desktop/out.txt
# with the following user and group you need the sudoers.d file
# if you want to run it as root user change user and group with root
User=measure
Group=measure
Restart=always
RestartSec=30
[Install]
# this make the trick, script will be executed only once the
# connection to a network has been established
WantedBy=network-online.target
将先前的代码保存在以下文件中:/etc/systemd/系统/并使其可执行:
sudo chmod +x /etc/systemd/system/protonvpn.service
重新加载 systemd 以发现新服务:
systemctl daemon-reload
启用服务在启动时启动:
sudo systemctl enable protonvpn
测试一下:
sudo systemctl start protonvpn
最后检查一下服务是否正常启动 VPN,也可以@reboot