在当前终端启动 startxwin

在当前终端启动 startxwin

我正在使用 Cygwin,并使用 Console2 替代默认的 Cygwin 终端。我需要使用 X11 转发,每次运行 startxwin 时,它都会在新终端中启动它。我希望在 Console2 内的同一个终端(或新选项卡中)中打开它。理想情况下,我可以使用 startxwin 启动 Cygwin,或者使用 Cygwin XWin 服务器启动新选项卡。这可能涉及编辑文件.startxwinrc,但我不确定如何进行。我最近才开始在 Cygwin 中使用 X11 转发。

我怎样才能做到这一点?

谢谢。

编辑
我正在尝试在 Cygwin 中启动 X11 会话。这可以通过将DISPLAY环境变量设置为 来完成0.0。然后通过发出命令 启动 X11 服务器startxwin。发出该命令后,将在另一个窗口中打开一个新终端。该终端非常简单而且很丑陋。我想要发生的是该终端要么作为 Console2 中的新选项卡出现,要么让它在启动它的同一终端中运行。这样,我就可以继续在根据我的喜好优化的终端中工作。或者,如果可以启动已启用 X11 转发的 Cygwin,那就更理想了。我目前正在使用此命令 启动 Cygwin H:\bin\bash.exe --login -i -c "cd /cygdrive/d; exec /bin/bash"。我需要使用 X11 的全部原因是因为我正在通过 SSH 进入远程服务器,该服务器有我需要使用的带有 GUI 的程序。我只想能够在 Console2 中完成所有操作。

答案1

当我切换到 console2 时,我尝试让控制台始终识别 X 何时运行,然后在将选项卡设置为连接到其他系统时将其正确传递给选项卡,这让我很头疼。这是我最终决定的解决方案。

首先,通过一个简单的 dos bat 文件将 cygwin 会话运行到 shell 中,以正确确定 X 是否正在运行。为此,我使用 if/test 来查看 $DISPLAY 是否已设置。如果没有,它会运行一个简单的 xset 调用 -display :0.0 来查看 X 是否正在运行。(0.0 是我设置的 cygwin 的默认值。如果需要,您显然也可以在此处查看其他值)。如果它返回 true,它会相应地设置 DISPLAY。我将其添加到 cygwin 中 /etc/profile 的末尾,尽管您可能可以将其放在 .bashrc 或其他一些在您登录时始终运行的脚本中。

# /etc/profile check to set display if X is running on :0.0
if [ -n $DISPLAY ]; then
  if xset -display :0.0 q &>/dev/null; then
    export DISPLAY=:0.0
  fi
fi

将其添加到 /etc/profile 时,您需要在启动 console2 时调用登录 shell。例如,从 dos .BAT 文件中调用 bash --login -i。

为了处理转到其他系统的问题,我最初只是使用批处理文件直接调用 ssh,但这会跳过设置此显示。为了解决这个问题,我修改了 bat 文件,改为先调用 bash --login:

(DISPLAY 的设置是另一个建议的初步尝试。对于大多数 cygwin 应用程序来说,它实际上没有任何作用)

SSH 脚本

@echo off

C:
chdir C:\cygwin\bin

if NOT "x%DISPLAY%" == "x" set DISPLAY=":0.0"

set sshcmd="ssh -Y "

bash --login -c %sshcmd%%1%

需要注意的是,如果 cygwin 的 X 服务器(或其他 Xwindow 服务器)未在 :0.0 上运行,或者您未调用登录 shell,则对 /etc/profile 的修改将不起作用。但是,如果您在 Cygwin.bat 中使用 bash -i --login 并将 console2 设置指向该文件,并使用示例 Ssh.bat 连接到远程系统(例如,将 C:\cygwin\ssh.bat [remote-host-name] 放在“控制台”选项卡设置的“Shell:”字段中,并将 C:\cygwin\bin 作为启动目录)

相关内容