将xterm重定向到无头机器的背景
我有一个启动 xterm 并转储 uart 日志的应用程序。我能够看到它启动并在 GUI 中转储日志。但是,使用远程会话,我希望 xterm 输出作为后台进程在某处运行,以便我可以在单个终端内来回切换。
使用图形用户界面
使用远程终端 (SSH)
$ xterm
xterm: Xt error: Can't open display: :0
我试图做类似的事情,但没有成功 -
alias xterm="/bin/bash -c"
我也不想X forwarding在我的本地机器上有并启动一个窗口。
回答
如果您只需要日志,则很可能不需要 X 服务器或xterm.
您可以简单地运行目标命令本身。从您的屏幕截图看来,该命令可能是telnet 127.0.0.1 <port_number>. 您可以从应用程序启动的脚本或ps -ef运行时的脚本中找到它。如果是 UART,那么您也可以使用minicom或socat直接连接到串行端口,而无需任何额外的程序。这样,您甚至不需要telnet.
您可以将此命令与其中之一结合使用screen,tmux以便它在后台运行,并且您可以从任何终端或控制台切换到它。只要运行screen不带参数,然后运行虚拟屏幕上的命令。与 分离CTRL-a d,您的命令将继续在后台运行,随时可以使用 重新连接到它screen -r。
而且,screen还可以直接连接串口,花一个的钱买两个。
问题xterm是它不会在除了图形缓冲区之外的任何地方写入日志,即使在那里它也只会作为不适合任何处理的闪烁像素。如果你坚持走这条路,你有几个选择:
- 更改应用程序运行的脚本(根据您的情况可能无法实现)
- 替换
/usr/bin/xterm为仅运行的虚拟脚本bash而不是xterm,并将输出重定向到文件(丑陋,但您可以通过更改PATH并将其放在其他地方来避免破坏其他应用程序)。在您的脚本中,您可以使用bash的重定向功能,例如>或管道输出到tee。 - 在后台启动 VNC 服务器,并
DISPLAY在运行应用程序时将环境变量设置为虚拟屏幕的数量。在这种情况下,来自应用程序的任何窗口都将在 VNC 虚拟屏幕上打开,您可以随意连接到它。 - 使用
xvfb作为一个虚拟的X服务器与xterm记录等结合起来