排除在 Linux 上创建虚拟会话时发生的故障 - NICE DCV
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

排除在 Linux 上创建虚拟会话时发生的故障

如果连接到虚拟会话导致 No session availableThe sessionId session is not available 错误,这可能是由于虚拟会话创建失败并被终止。

您可以使用 dcv list-sessions 命令检查会话是否存在。有关检查运行的会话的更多信息,请参阅查看 NICE DCV 会话。如果该会话未出现在列表中,则它可能已失败。

调查在 Linux 上创建虚拟会话失败的问题

使用以下命令在 Linux 上创建一个虚拟会话:

$ dcv create-session session

只有在会话创建失败时,该命令才会返回错误。不过,可能会出现以下情况:最初成功创建会话,但会话在用户连接之前终止。您可能会注意到这一点,因为在您检查现有会话时(例如,使用 dcv list-sessions 命令或 dcv describe-session session),您可能找不到列出的会话。

大多数情况下,发生这种情况是因为已创建桌面会话,但会话立即失败,例如,由初始化脚本启动的应用程序之一崩溃或失败,或者缺少所需的工具之一。

如果会话创建失败,请检查以下内容:

  • 检查 /var/log/dcv/sessionlauncher.log 文件,其中包含与创建新会话进程的 dcv 组件相关的日志。

  • 检查 /var/log/dcv/dcv-session.user.session.log 文件,其中包含与 dcv 初始化脚本相关的日志。

  • 检查与会话所有者对应的主目录中的 $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+x init.sh

要从用户 Shell 中使用指定的初始化脚本创建会话,请运行以下命令,其中 init.sh 是以前创建的脚本:

$ dcv create-session dummy --init init.sh

要以超级用户身份为另一个用户创建会话,您可以改为运行以下命令:

$ sudo dcv create-session test --user user --owner user --init init.sh

最后,您可以启动一个测试应用程序,例如 dcvgltest(仅在安装了 nice-dcv-gltest 软件包时)或 glxgears,以验证 OpenGL 或任何其他应用程序是否正常工作。