通过 systemctl 的 Xvnc:如何使用“xhost +”

通过 systemctl 的 Xvnc:如何使用“xhost +”

我想在 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 +

相关内容