本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排除在 Linux 上创建虚拟会话时发生的故障
如果连接到虚拟会话导致 No session available
或 The sessionId
错误,这可能是由于虚拟会话创建失败并被终止。session
is not available
您可以使用 dcv list-sessions
命令检查会话是否存在。有关检查运行的会话的更多信息,请参阅查看 NICE DCV 会话。如果该会话未出现在列表中,则它可能已失败。
调查在 Linux 上创建虚拟会话失败的问题
使用以下命令在 Linux 上创建一个虚拟会话:
$
dcv create-sessionsession
只有在会话创建失败时,该命令才会返回错误。不过,可能会出现以下情况:最初成功创建会话,但会话在用户连接之前终止。您可能会注意到这一点,因为在您检查现有会话时(例如,使用 dcv list-sessions
命令或 dcv describe-session
),您可能找不到列出的会话。session
大多数情况下,发生这种情况是因为已创建桌面会话,但会话立即失败,例如,由初始化脚本启动的应用程序之一崩溃或失败,或者缺少所需的工具之一。
如果会话创建失败,请检查以下内容:
-
检查
/var/log/dcv/sessionlauncher.log
文件,其中包含与创建新会话进程的 dcv 组件相关的日志。 -
检查
/var/log/dcv/dcv-session.
文件,其中包含与 dcv 初始化脚本相关的日志。user
.session.log
-
检查与会话所有者对应的主目录中的
$HOME/.xsession-errors
文件。该文件包含系统 X 会话初始化脚本生成的日志,通常包含桌面 Session Manager 或脚本调用的其他应用程序生成的日志。 -
检查系统日志以获取有关故障系统和组件的更多信息。首先,检查
dmesg
输出(例如,如果进程失败)和journalctl -xe
输出。 -
使用故障防护会话进行测试,以确认该问题与使用的 Session Manager 无关。
如果仅特定用户发生故障,您也可以尝试执行以下操作:
-
检查用户配置,特别是删除或重命名用户配置时发生什么情况。
根据桌面环境和版本,配置目录可能是用户目录中的
.gnome
、.kde
或.config
。 -
检查影响用户
PATH
或环境的特定用户配置。通常,特定用户的会话启动失败是由于框架(例如anaconda
)覆盖某些标准本机命令造成的,这可能会导致会话初始化中的dbus
连接失败。 -
检查权限问题。为本地
~/.dbus
或~/.Xauthority
设置的错误权限(例如,它们可能由root
而不是用户拥有)可能导致桌面会话立即终止。
在 Linux 上创建故障防护虚拟会话
要验证会话创建失败是否与桌面环境启动相关,一种常见的策略是创建最小会话。我们将该会话称为“故障防护”会话。如果创建的故障防护会话正常工作,我们可以推断您的正常会话失败是由于默认系统桌面环境无法启动。相反,如果故障防护会话也失败,则问题更有可能与 NICE DCV 服务器设置有关。
故障防护会话通常由仅包含简单窗口管理器和终端的桌面会话组成。这样,用户就可以检查是否存在与使用的特定会话环境(通常是 gnome 或 KDE)相关的会话创建问题。
要创建故障防护会话,您需要为用户创建一个初始化脚本,其中包含以下内容:
#!/bin/sh metacity & xterm
这会启动 metacity
窗口管理器并启动 xterm
终端,在终止 xterm
进程时,会话也会立即终止。
您可以使用所选的其他 Session Manager 或终端,但前提是它们在系统上可用。
注意
您必须确保脚本不会立即终止。为此,您需要在脚本结束时启动一个不会立即终止的程序。在终止最后一个命令(该示例中的 xterm
)时,也会终止初始化会话。同时,在窗口管理器之后启动另一个工具时,您需要确保它在后台运行(通过添加该示例中的 &
),以确保调用下一个命令。
然后,您需要确保可以执行初始化脚本:
$
chmod a+xinit.sh
要从用户 Shell 中使用指定的初始化脚本创建会话,请运行以下命令,其中 init.sh
是以前创建的脚本:
$
dcv create-session dummy --initinit.sh
要以超级用户身份为另一个用户创建会话,您可以改为运行以下命令:
$
sudo dcv create-session test --useruser
--owneruser
--initinit.sh
最后,您可以启动一个测试应用程序,例如 dcvgltest
(仅在安装了 nice-dcv-gltest
软件包时)或 glxgears
,以验证 OpenGL 或任何其他应用程序是否正常工作。