我尝试了很多方法,例如
terminator -x abc.sh
上述命令给出了这个错误:
You need to run terminator in an X environment. Make sure $DISPLAY is properly set
我也试过
gnome-terminal -x ./abc.sh
上述命令给出了以下错误
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused
Failed to parse arguments: Cannot open display:
答案1
假设 Ubuntu 到 Ubuntu
如果你在服务器上安装了相关软件,你可以使用 远程登录,然后运行和
ssh -X
等图形应用程序。参见此链接,terminator
gnome-terminal
您也可以简单地在本地启动其他终端窗口,并在这些窗口中远程登录,
ssh
并以此方式在服务器中运行几个文本模式应用程序(每个程序都在自己的终端窗口中)。
如果你使用 Windows 10 桌面并想要连接到你的 ubuntu 服务器
一个简单的解决方案是根据以下链接在 Windows 中安装和使用 Putty,
PuTTY 是一个 SSH 和 telnet 客户端,最初由 Simon Tatham 为 Windows 平台开发。PuTTY 是一个开源软件,提供源代码,由一群志愿者开发和支持。
您可以下载PuTTY这里。
您可以启动一个或多个Putty窗口并通过 运行不同的任务ssh
。
正如@SergiyKolodyazhnyy 的评论所述,您可以使用xrdp
它来打开从 Windows 到 Ubuntu 的远程桌面会话。
正如@PerlDuck 的评论中所述,您可以在 Windows 中安装和使用 X 服务器,以便能够通过 运行图形应用程序ssh
,但根据您的原始问题,这可能有点小题大做。
答案2
事情是这样的:terminator
和gnome-terminal
都是 GUI 应用程序。如果您的脚本不需要 GUI 并且是一个简单的 shell 脚本,那么您可以在 ssh 会话中顺利运行它,而无需终端仿真器。当然,您的脚本需要位于您尝试运行脚本的文件系统上。
如果出于某种原因你绝对需要terminator
或gnome-terminal
,你总是可以利用偏磷酸钠启动远程桌面会话。当然,前提是您要访问的 Ubuntu 系统有 X 服务器;例如,服务器计算机通常没有任何 GUI,因为这存在安全风险。
答案3
如果您确实需要,可以将需要 GUI 的应用程序从 SSH 会话运行到桌面会话中。我使用以下方法在需要时启动 VMWare 虚拟机,但我不在计算机前面。
我要强调的是,您提到您正在连接到 Ubuntu Server,默认情况下它没有安装桌面环境。在这种情况下,值得使用tmux
或screen
,或将脚本推送到后台,或使用第二个 SSH 会话。如果桌面环境安装在服务器可以采取以下步骤。
以下脚本适用于 Ubuntu 16.04 的默认 Lightdm 和 Unity。
1.第一个要求是您的用户必须登录桌面会话。我使用以下脚本来实现这一点(来源和解释):
#!/bin/bash
# NAME: lightdm-auto-login
main() {
# If the file '/etc/lightdm/lightdm.conf' exists create a backup copy
[[ -f /etc/lightdm/lightdm.conf ]] && mv /etc/lightdm/lightdm.conf{,.bak}
# Create autologin configuration for the current $USER = $1
echo -e "[Seat:*]\nautologin-user=$1" > /etc/lightdm/lightdm.conf
# Restart 'lightdm' while autologin option is enabled
systemctl restart lightdm.service
# Wait for a moment to complete the login process and remove the conf file
sleep 30 && rm /etc/lightdm/lightdm.conf
# Restore the backup if exists
[[ -f /etc/lightdm/lightdm.conf.bak ]] && mv /etc/lightdm/lightdm.conf{.bak,}
}
# Execute the 'main()' function with root privileges in the background 'sudo -b'
# Pass the curent $USER as arg (https://unix.stackexchange.com/a/269080/201297)
sudo -b bash -c "$(declare -f main); main $USER"
该脚本应以普通用户(属于 sudoers 组)的身份执行。
我更愿意将脚本放置
/usr/local/bin
为可在整个系统范围内作为 shell 命令访问。别忘了使其可执行。
2.其次,必须将一些环境变量(如$DISPLAY
等)从桌面会话导出到 SSH 会话中。以下脚本将执行此操作,并将启动作为位置参数传递的命令(来源和解释):
#!/bin/bash -e
# NAME: gui-launcher
# Check whether the user is logged-in
while [ -z "$(pgrep gnome-session -n -U $UID)" ]; do sleep 3; done
# Export the current desktop session environment variables
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ")
# Execute the input command
nohup "$@" >/dev/null 2>&1 &
exit 0
该脚本将一直工作直到用户登录,包括锁定屏幕。
我更愿意将脚本放置
/usr/local/bin
为可在整个系统范围内作为 shell 命令访问。别忘了使其可执行。
3.用法:
建立 SSH 会话;
执行
lightdm-auto-login
;执行
gui-launcher <commands or script>
,对于例子:gui-launcher gnome-terminal -x bash -c "<my command or script>; exec bash"
请注意,前一个命令完成后,最后一个子命令exec bash
将保持启动打开。gnome-terminal
4.示范:
5.参考文献和更多示例可在此处获得。