如何防止 Cygwin 的 XWin 服务器自动启动 xterm?

如何防止 Cygwin 的 XWin 服务器自动启动 xterm?

每当我使用“开始”菜单中的“XWin 服务器”链接启动 Cygwin 的 X 服务器,或者从startxwinCygwin shell 运行时,都会自动出现一个 xterm 窗口,这是我既不想要也不需要的。

我该如何避免这种情况?

(问题灵感来自此评论经过斯汀·范普克在 Stack Overflow 上)

答案1

自从@me_and 最初回答这个问题以来,startxwin 的行为似乎已经发生了变化,因此简单地在主目录中创建一个空的 .startxwinrc 将不再起作用。

我找到了答案这里。实际上,当 .startxwinrc 中的最后一条命令退出时,服务器将退出。如果您想防止这种情况发生,可以将此内容作为 .startxwinrc 中的最后一行:

sleep inf

这不会启动任何客户端程序,但也会阻止.startxwinrc 退出。

答案2

更新:这个答案现在已经过时了。有关最新答案,请参阅以下是用户 551570 的回答

man startxwin

如果命令行中没有给出特定的客户端程序,startxwin则会在用户主目录中查找名为的文件,.startxwinrc以作为 shell 脚本运行来启动客户端程序。如果不存在这样的文件,startxwin则将使用以下内容作为默认值:

xterm  -geometry  +1+1  -n  login  -display  :0

因此,为了避免在启动 X 服务器时启动任何程序,您需要一个空白.startxwinrc文件。只需从 Cygwin 提示符运行以下命令:

touch ~/.startxwinrc

答案3

作为2014 年 11 月最新版本的startxwin用来xinit启动 Cygwin/X 服务器,该服务器实际上名为XWin.exe。该过程大致如下:

  1. 你打电话startxwin
  2. startxwin创建一个新的.Xauthority文件和一个名为.serverauth.12341234每次启动 X 时都会更改)的文件
  3. startxwin设置一些客户端和服务器参数
  4. startxwin使用客户端和服务器参数进行调用xinit,包括一些可选的 shell 脚本和对 auth 文件的引用。
  5. xinit启动 X 服务器,运行一些 rc 脚本
  6. xinit启动客户端(通常xterm)或者客户端 rc 脚本。我们希望避免这种情况
  7. 当您关闭客户端或客户端 rc 脚本完成时,xinit关闭 X 服务器。如果我们避免第 6 步,我们也需要避免这一点

可以XWin.exe直接在 Bash 登录 shell 中运行,而无需执行startxwinxinit执行的相关任务。这样做的主要优点是它的行为符合我们的要求:X 服务器启动并保持运行。不幸的是,由于.Xauthority启动期间没有传递文件,您的 X 服务器将允许任何本地进程连接到它,这是不安全的。

幸运的是,xinit它能完成我们不想做的大部分事情。有一个快速破解方法可以绕过它,但保留与服务器本身相关的xinit其余元素。startxwin

总结:在 中startxwin,靠近底部有一行内容:

eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs

将该行更改为:

eval \"$server\" $display $serverargs

从现在开始,startxwin脚本将XWin.exe直接调用,而不是调用xinit。显然,这将禁用任何客户端 rc 脚本,但我们一开始就不想要这些脚本。这也意味着 X 将继续运行,而不需要客户端进程来保持其活动状态(即防止xinit其被终止)。

答案4

我习惯用startxwin(.exe)启动Cygwin X。我的.startxwinrc文件内容如下:

X :0 -rootless mrxvt  -geometry  +1+1  -n  login  -display  :0 -tt ImTabbed

到目前为止,它都正常工作。我遇到的唯一错误是显示仍然被另一个 X 进程“打开”。此错误指定了 X 服务器默认为每个会话生成的某个文件。Cygwin 人员知道,会话终止时该文件不会被删除。

所以我写了一个别名来“cure”:

alias freex='rm /tmp/.X0-lock'

我把同一行(无论如何,引号之间的部分)放在我的 .bashrc 和 .bash_profile 文件中,以防我忘记自己做这件事。

嗨嗨。

苯并噻嗪

相关内容