如何防止Cygwin的XWin Server自动启动xterm?


12

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

如何避免这种情况?

(问题由Stijn Vanpoucke在Stack Overflow上的评论所启发)

Answers:


5

自@me_以来,startxwin的行为似乎已经改变,并且最初回答了该问题,因此仅在主目录中创建一个空的.startxwinrc不再起作用。

我在这里找到了答案。本质上,当.startxwinrc中的最后一个命令退出时,服务器将退出。如果要防止这种情况,可以将其作为.startxwinrc的最后一行:

sleep inf

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


1
由于某种原因,这对我不起作用。我必须输入:exec sleep infinity如下所示:x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero

17

更新:此答案现在已过期。有关最新答案,请参见下面的user551570的答案

来自man startxwin

如果在命令行上未指定特定的客户端程序,startxwin则将在用户的主目录中查找一个名为.startxwinrcshell脚本的文件,以启动客户端程序。如果不存在此类文件,startxwin则将以下内容用作默认值:

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

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

touch ~/.startxwinrc

1
该解决方案在很长一段时间内都很好,但是现在就没有最新的更新了。使用空会.startxwinrc导致X服务器立即消失。:-(
Notinlist,2015年

1
@Notinlist就是这样。有点可悲。我将尝试调查并找到新的解决方案;看来系统现在变得有些复杂了,我无法轻易地弄清楚它应该如何工作……
me_and 2015年

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直接从猛砸登录shell中,没有了周围任务startxwinxinit执行。其主要优点是它的行为就像我们想要的:X服务器启动并保持运行。不幸的是,由于.Xauthority在启动过程中没有传递文件,因此您的X服务器将允许任何本地进程连接到该文件,这是不安全的。

幸运的xinit是,大多数我们不想要的东西都在做。有一个快速的技巧可以绕开,xinit但保留其余部分startxwin与服务器本身有关。

TL; DR:在中startxwin,底部附近有一行显示为:

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

将该行更改为:

eval \"$server\" $display $serverargs

从现在开始,startxwin脚本将XWin.exe直接调用,而不是调用xinit。显然,这将禁用所有客户端rc脚本,但我们首先不希望使用这些脚本。这也意味着X将继续运行,而无需客户端进程来保持它的生命(即xinit避免杀死它)。


0

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

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

到目前为止,它已经奏效。我得到的唯一错误是显示仍然被另一个X进程“打开”。此错误指定X服务器默认为每个会话生成的某个文件。Cygwin的人们知道,会话终止时不会将其删除。

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

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

我将.bashrc和.bash_profile文件中的同一行(无论如何引号之间)放在同一行中,以防万一我自己忘了自己做。

HTH。

百事通


这实际上不是这个问题的答案。可以重新措词,但是我认为这更适合作为单独的问答(如我在这里所做的那样)来处理您看到的错误。然后,您可以在此问题的评论中链接到该问题。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.