答案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
。该过程大致如下:
- 你打电话
startxwin
startxwin
创建一个新的.Xauthority
文件和一个名为.serverauth.1234
(1234
每次启动 X 时都会更改)的文件startxwin
设置一些客户端和服务器参数startxwin
使用客户端和服务器参数进行调用xinit
,包括一些可选的 shell 脚本和对 auth 文件的引用。xinit
启动 X 服务器,运行一些 rc 脚本xinit
启动客户端(通常xterm
)或者客户端 rc 脚本。我们希望避免这种情况- 当您关闭客户端或客户端 rc 脚本完成时,
xinit
关闭 X 服务器。如果我们避免第 6 步,我们也需要避免这一点
可以XWin.exe
直接在 Bash 登录 shell 中运行,而无需执行startxwin
和xinit
执行的相关任务。这样做的主要优点是它的行为符合我们的要求: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 文件中,以防我忘记自己做这件事。
嗨嗨。
苯并噻嗪