每当我使用“开始”菜单中的“ XWin Server”链接启动Cygwin的X服务器时,或者通过startxwin
从Cygwin Shell 运行时,我都会自动出现一个xterm窗口,我既不需要也不需要。
如何避免这种情况?
(问题由Stijn Vanpoucke在Stack Overflow上的评论所启发)
每当我使用“开始”菜单中的“ XWin Server”链接启动Cygwin的X服务器时,或者通过startxwin
从Cygwin Shell 运行时,我都会自动出现一个xterm窗口,我既不需要也不需要。
如何避免这种情况?
(问题由Stijn Vanpoucke在Stack Overflow上的评论所启发)
Answers:
更新:此答案现在已过期。有关最新答案,请参见下面的user551570的答案。
来自man startxwin
:
如果在命令行上未指定特定的客户端程序,
startxwin
则将在用户的主目录中查找一个名为.startxwinrc
shell脚本的文件,以启动客户端程序。如果不存在此类文件,startxwin
则将以下内容用作默认值:xterm -geometry +1+1 -n login -display :0
因此,为避免启动X Server时启动任何程序,您需要一个空白.startxwinrc
文件。只需从Cygwin提示符下运行以下命令:
touch ~/.startxwinrc
.startxwinrc
导致X服务器立即消失。:-(
截至2014年11月,最新版本的startxwin
使用xinit
,开始在Cygwin / X服务器,它实际上是所谓的XWin.exe
。该过程如下所示:
startxwin
startxwin
创建一个新.Xauthority
文件,然后调用一个.serverauth.1234
(1234
每次启动X时都会更改)startxwin
设置一些客户端和服务器参数startxwin
调用xinit
与客户端和服务器参数,其中包括一些可选的shell脚本,并在auth文件的引用。xinit
启动X服务器,运行一些rc脚本xinit
启动客户端(通常是xterm
)或客户端rc脚本。我们要避免这种情况xinit
关闭X服务器。如果我们避免步骤6,我们也需要避免这种情况它可以运行XWin.exe
直接从猛砸登录shell中,没有了周围任务startxwin
和xinit
执行。其主要优点是它的行为就像我们想要的: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
避免杀死它)。
我习惯用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。
百事通
exec sleep infinity
如下所示:x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit