How to solve 'session negotiation failed, application terminated prematurely'
如果用户在连接到 Linux 主机时收到此消息:
“会话协商失败。错误:会话失败,应用程序提前终止。
这意味着由 NoMachine 节点运行的应用程序(即桌面环境或自定义应用程序)在启动后立即终止。
当为启动桌面或自定义应用程序指定的命令不合适时,可能会发生这种情况。
启动 Linux 桌面环境的命令在节点配置文件 (/usr/NX/etc/node.cfg) 的 DefaultDesktopCommand 键中定义。
例如:
DefaultDesktopCommand “/etc/X11/Xsession 'gnome-session --session=ubuntu'”
为了检查命令是否正确,您可以执行以下操作:
1) 通过在终端中执行以下命令,找出系统上安装的桌面环境:
ls /usr/share/xsessions
2)然后检索命令以启动您选择的桌面。此类命令写在 *.desktop 文件中以 Exec 开头的行中。
例如:
grep ^Exec /usr/share/xsessions/gnome.desktop
returns:
Exec=gnome-session
有关更多示例,另请参阅本文:https://www.nomachine.com/AR04K00667#2.1
3) 检索命令后,请确保在 node.cfg 中的 DefaultDesktopCommand 键中设置该命令。在此示例中,它应该是:
DefaultDesktopCommand gnome-session
不需要重新启动服务器,此更改将在启动新会话时生效。
对于自定义会话,节点运行的应用程序在客户端用户界面中指定,例如“运行控制台”或“运行以下命令”中设置的程序。
当应用程序立即终止时,连接日志文件中会报告以下错误:
NX> 501会话失败,应用程序提前终止。
NX> 598 错误:无法连接到 nxclient --monitor。
在最终用户主机上的会话日志文件中:
3579 3579 15:18:18 658.862 客户端会话:失败原因是“会话协商失败。错误:会话失败,应用程序提前终止。
这些文件存储在 /usr/NX/var/log/node 目录中创建的 NoMachine 会话目录中。
进一步调查
当出现错误“应用程序过早终止”时,在远程主机上的以下文件中查找问题的可能原因可能会有所帮助:
1) /usr/NX/var/log/node/C-<session> 目录中的客户端文件。
例如:/usr/NX/var/log/node/C-testdrive2-1005-246612EE435B150D4A8D37463B948139/clients
NoMachine 节点将 X 应用程序的标准错误重定向到此文件。
但是,在运行虚拟桌面时,应该考虑到 X 显示管理器通常会将标准错误重定向到:~/.xsession-errors,并且 NoMachine 客户端文件可以为空。
2) 用户家中的 .xsession-errors 文件。
例如:/home/nxtest01/.xsession-errors
3) 系统日志。
例如:Ubuntu 上的 /var/log/messages
或者,如果操作系统是基于系统的:journalctl -b -0 > journalctl.txt
4)此外,以下测试还可以提供其他信息:
- 启动 NoMachine 自定义会话并选择:“运行控制台”+“在虚拟桌面中运行命令”
- 在此控制台中,执行节点配置文件中 DefaultDesktopCommand 键中的相同命令集。