我尝试在用户登录时使用 systemd 启动一个脚本。然而,到目前为止,它还没有按我想要的方式工作。我做了以下事情:
我将以下服务放在/etc/systemd/system/loginNordVPN.service
[Unit]
After=network.service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/autologinNordVPN
[Install]
WantedBy=default.target
该脚本/usr/local/bin/autologinNordVPN
的内容如下:
#!/usr/bin/expect
# Script for automatic login at nordvpn
set timeout 10
set username "myusername\r"
set credentialpass "mypassword\r"
spawn nordvpn login
expect "Email / Username: "
send "$username"
expect "Password: "
send "$credentialpass"
interact
/usr/local/bin/autologinNordVPN
如果我以./autologinNordVPN
(独立,无论我以普通用户身份启动它还是以具有 sudoers 权限的用户身份启动它)的方式启动它,脚本都会起作用。
启动机器并以具有 sudoers 权限的用户身份登录后,我可以连接到 NordVPN - 上述服务执行了脚本。到此为止一切正常。
如果我以没有 sudoer 权限的“普通”用户身份登录,则无法连接到 NordVPN - 因此出了问题。因此,我尝试将上述服务添加到用户 systemd。我将 loginNordVPN.service 复制到,~/.local/share/systemd/user/
然后使用 启动了该服务systemctl --user enable loginNordVPN.service
。(我之前也从系统范围的 systemd 中删除了该服务。)
重启并登录后,似乎脚本并未完全执行。
如果我查看日志,journalctl --user | grep "nordv"
我可以看到,该服务已启动,但无论出于什么原因,它都不起作用:
journalctl --user | grep "nordv"
Dez 13 15:04:03 MYSYSTEM systemd[3497]: Started Login current user to nordvpn.
Dez 13 15:04:03 MYSYSTEM autologinNordVPN[3503]: spawn nordvpn login
我尝试通过以下方式更改用户服务,但没有效果:
[Unit]
Description=Login current user to nordvpn
[Service]
StandardOutput=journal
ExecStart=/usr/local/bin/autologinNordVPN
[Install]
WantedBy=default.target
并且这个尝试不起作用:
[Unit]
Description=Login current user to nordvpn
[Service]
Type=oneshot
RemainAfterExit=true
StandardOutput=journal
ExecStart=/usr/local/bin/autologinNordVPN
[Install]
WantedBy=default.target
我必须做什么才能让我的脚本服务为任何用户服务?
谢谢!
答案1
您的单元文件可能需要依赖于nordvpnd
,该守护进程似乎实际连接到 NordVPN 网络并配置 VPN 接口。
诸如单元文件部分Requires=nordvpn.service
中的一行应该可以完成此操作。[Unit]
如果你定义/etc/systemd/system/loginNordVPN.service
为:会发生什么情况?
[Unit]
Description=NordVPN Auto Login
After=network.service
After=network-online.target
Requires=nordvpn.service
[Service]
ExecStart=/usr/local/bin/autologinNordVPN
[Install]
WantedBy=default.target
和systemctl enable nordvpnd
?
答案2
我不知道为什么,但是现在这个有效了- ~/.local/share/systemd/user/loginNordVPN.service
:
[Unit]
Description=Login current user to nordvpn
After=network.service
After=network-online.target
#Requires=nordvpnd.service
[Service]
#StandardOutput=journal
ExecStart=/usr/local/bin/autologinNordVPN
#TimeoutSec=10
[Install]
WantedBy=default.target
当然,我启用并启动了该服务。