我有一个工作 Linux,我可以通过ssh
和远程登录ssh -Y
。
我想使用的一个应用程序使用 GLFW。疫情爆发之前,我可以远程工作,因为有一个用户(我)在本地登录。
现在,我需要重启机器,虽然我可以通过 ssh 登录,但自从重启后没有用户登录过。因此,我的应用程序无法启动。我得到:
Cannot initialize GLFW library
当应用程序尝试打开显示时。(我不关心这个显示,应用程序会生成我可以远程访问的输出文件)
我尝试使用 xterm 导出显示export DISPLAY=[my ip address]:0
并使其正常工作。但这没用,因为我的应用程序需要一些 OpenGL:
what(): GLFW error: GLX: Forward compatibility requested but GLX_ARB_create_context_profile is unavailable
所以,我想问的是:
通过 ssh (-Y),我如何才能像坐在机器前一样登录用户? 我推测 X 启动过程中缺少了某些部分。
如果这有用:
4.15.0-91-generic #92~16.04.1-Ubuntu SMP Fri Feb 28 14:57:22 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
答案1
这是一个从远程 ssh 连接为超级用户打开本地 X 桌面的解决方案。我希望它会很有用,因为我无法让它为普通用户运行。
1. 使用 ssh 登录你的机器
2.允许任何人在控制台上打开本地 X11 会话
你必须编辑/etc/X11/Xwrapper.config并改变
allowed_users=console
到
allowed_users=anybody
3. 启动会话(sudo)
sudo startx
X11 会话启动(以超级用户身份),您可以在 ssh 会话上看到正常的 X11 会话消息。
startx 直到 X11 会话退出后才会退出。如果 startx 退出时出现错误消息,则表示出现了问题。
对于普通用户来说,它通常会失败
在某些系统上,您可以只使用 startx(或 startx -- vt[number] 来强制使用虚拟控制台)但通常会失败。
它似乎与以下访问权限相关(至少):
- /dev/tty[数字]
- /dev/dri/card0
- /dev/fb0
这些权利应该通过某种机制来设置,并用 chown 强制它们会做出一些改进,但并不能解决问题。
我无法找到普通用户可以使用 startx 的系统与无法使用 startx 的系统之间的区别。它们都运行 ubuntu eoan,据我所知,配置相同。只有硬件不同,尤其是视频卡。