![通过 systemctl 的 Xvnc:如何使用“xhost +”](https://linux22.com/image/1359326/%E9%80%9A%E8%BF%87%20systemctl%20%E7%9A%84%20Xvnc%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E2%80%9Cxhost%20%2B%E2%80%9D.png)
我想在 Fedora 16 上将 Xvnc 作为服务运行。不是 vncserver,因为它承担了完整窗口管理器的重任,而是仅使用 Xvnc 来启动 X。
我还希望“xhost +”在 X 会话上运行。以下是我目前在 systemctl 脚本中的内容:
[Service]
Type=simple
User=build
Environment=DISPLAY=:2
ExecStart=/usr/bin/Xvnc :2 -geometry 1280x1024 -SecurityTypes=None -AlwaysShared=1
ExecStartPost=-xhost +
ExecStop=/usr/bin/vncserver -kill :2
结果是 X 会话正在运行,并且不提示输入密码(“=None”)。但我无法从其他主机 (xhost +) 连接到该 X 服务器,而这正是我所需要的。
为什么 ExecStartPost 不起作用?“systemctl status”没有显示任何输出,但我能从其他地方找到该输出吗?
以下是该状态,仅供参考:
Loaded: loaded (/lib/systemd/system/vncserver@:2.service; enabled)
Active: active (running) since Thu, 11 Apr 2013 11:02:26 -0400; 2s ago
Process: 13577 ExecStop=/usr/bin/vncserver -kill :2 (code=exited, status=2)
Main PID: 13584 (Xvnc)
CGroup: name=systemd:/system/[email protected]/:2
└ 13584 /usr/bin/Xvnc :2 -geometry 1280x1024 -SecurityTypes=None -AlwaysShared=1
答案1
我的解决方案是制作一个脚本包装器,它运行“Xvnc”,休眠一秒钟(可选?),并在新的 DISPLAY 上运行“xhost+”。现在它可以正常工作了。
#!/bin/csh
/usr/bin/Xvnc $* -geometry 1280x1024 -SecurityTypes=None -AlwaysShared=1 &
while ($#argv)
if ($argv[1] =~ ":*") then
setenv DISPLAY $argv[1]
endif
shift
end
sleep 1
xhost +