我在 Linux 服务器上运行 Wine,以便运行一些旧的 Windows 应用程序。
我现在需要编写一个脚本以确保它们正在运行。
是否可以创建到服务器的 ssh 连接并启动应用程序?
例如,如果我在桌面上,请打开终端窗口并运行
wine "Z:\home\user\Desktop\application"
应用程序打开。但是如果我通过 SSH 连接并运行
wine "Z:\home\user\Desktop\application"
我得到:
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
err:systray:initialize_systray Could not create tray window
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
我想我需要告诉它在哪里启动应用程序而不仅仅是启动它,但不知道如何执行此操作?
附加信息:
我目前正在 Windows PC 上工作,并使用 Putty 连接到 Linux/Wine 服务器。 (我还有 RDP 连接,因此可以看到桌面)。
从长远来看,我将在另一台 Linux 服务器 (MgmtSrv) 上运行该脚本,该服务器将与 Linux/Wine 服务器建立 ssh 连接来管理它。 MgmtSrv 没有安装 Wine,也没有设置 X-Display。
答案1
正如您所猜测的,您需要告诉 Wine 在哪里显示其应用程序。由于你的 Wine 服务器有一个 X 显示器,它可能是:0
:
DISPLAY=:0 wine ...
应该可以解决问题(假设您的 X 身份验证 cookie 正常;如果不是,您将收到Invalid MIT-MAGIC-COOKIE
错误消息)。
答案2
根据您的应用程序类型,您可以采用以下方法:
- 如果您的应用程序是基于控制台的(没有图形),请使用
wineconsole
(不是wine
)。 - 如果您安装了 X 服务器,则需要指定
DISPLAY
变量以指向正确的屏幕。 - 如果您想通过以下方式运行应用程序X11转发,配置
X11Forwarding
在你的 SSH 配置中。 - 如果您想无头运行图形程序,请考虑安装X 虚拟帧缓冲区。
答案3
只需以普通用户身份登录即可解决此问题。
问题:
/root *# wine .....
使固定:
/root # exit
解决方案:
/normal_user> ./wine yourappname OR ./wine64 yourappname