Citrix

出自 ArchWiki

本文或本章节需要改进语言、wiki 语法或风格。请参考 Help:Style

原因: 参见 Help:Style。(在 Talk:Citrix 中讨论)

Citrix Workspace App (之前称为 Citrix Receiver 和 ICA Client) 是 XenDesktop (桌面虚拟化软件) 和 XenApp (应用虚拟化软件) 的客户端组件,由 Citrix Systems 开发。

安装

安装 icaclientAUR 软件包。它包含 wfica.desktop 文件,因此 Arch 知道如何打开 ica 文件。

Chromium/Google Chrome

如果您在使用 Chromium 启动 Citrix 应用程序时遇到问题,只需转到 chrome://extensions 并禁用 “Citrix Receiver for Linux”。

wfica.desktop

创建 /usr/share/applications/wfica.desktop (Exec 路径可能因安装的软件包而异)

[Desktop Entry]
Name=Citrix ICA client
Comment="Launch Citrix applications from .ica files"
Categories=Network;
Exec=/opt/Citrix/ICAClient/wfica
Terminal=false
Type=Application
NoDisplay=true
MimeType=application/x-ica;

现在 xdg-open 将使用 /opt/Citrix/ICAClient/wfica 处理 .ica 扩展名。

注意: 如果您正在运行 Xfce 并且 Chromium 在错误的应用程序 (例如,文本编辑器) 中打开 .ica 文件,请确保您已安装 xorg-xprop

TLS/SSL 证书

由于 ICAClient 使用 SSL,您可能需要安全证书才能连接到服务器,请咨询服务器管理员。 如果有证书,请下载并将其放置在 /usr/lib/ICAClient/keystore/cacerts/ 中。

然后您可能会收到错误 You have not chosen to trust the issuer of the server's security certificate. (SSL Error 61)

可能有以下几个原因

您没有根证书颁发机构 (CA) 证书。
这些证书已安装在大多数系统上,它们是核心软件包 ca-certificates 的一部分,但它们不在 ICAClient 查找它们的位置。自 13.1 版本起,Citrix 需要将证书放在单独的文件中。您需要以 root 身份运行以下命令
# cd /opt/Citrix/ICAClient/keystore/cacerts/
# cp /etc/ca-certificates/extracted/tls-ca-bundle.pem .
# awk 'BEGIN {c=0;} /BEGIN CERT/{c++} { print > "cert." c ".pem"}' < tls-ca-bundle.pem
您可能还需要下载 CA 的中间证书并将它们存储在同一目录中。
更改证书目录后,可能需要重新哈希链接,以便 openssl 正确找到它们。跳过此步骤可能会导致 Citrix 仍然给出证书错误。 要执行此操作,请使用以下命令 (借用自 [1])

本文或本章节已过时。

原因: 在上次 [2018 年 4 月] openssl 升级之后,c_rehash 命令在 Arch 中已损坏。[除非该命令未在上游弃用,否则这应该是一个 错误报告] (在 Talk:Citrix 中讨论)
# c_rehash /opt/Citrix/ICAClient/keystore/cacerts/

可以使用 openssl rehash 命令代替不再起作用的 c_rehash

# openssl rehash /opt/Citrix/ICAClient/keystore/cacerts/

音频支持

Pulse Audio

Citrix Receiver 使用 ALSA。如果您使用 Pulse Audio,请安装 pulseaudio-alsa

要将音频输入到 Citrix Receiver,请在 ~/.ICAClient/wfclient.ini 中,在 [WFClient] 部分的任意位置添加 AllowAudioInput=True

截至客户端 2012 - 2020 年 12 月,Citrix 引入了额外的音频重定向:https://docs.citrix.com/en-us/citrix-workspace-app-for-linux/configure-xenapp.html#audio 。如果您的音频设备在 Citrix Workspace App 中不再被检测到,您可能需要按照提供的说明禁用此新功能。

Pipewire

Pipewire - 虽然未正式支持 - 但与 Citrix 的交互方式与 Pulse Audio 非常相似。 安装 pipewire-alsa 以允许 Citrix 重定向音频,并确保您的 ~/.ICAClient/wfclient.ini 中有 AllowAudioInput=True,如上所述。

Citrix 还会检查系统上是否存在 /usr/bin/pulseaudio 二进制文件,否则会中止音频重定向。 因此,您还需要创建一个包含以下内容的虚拟可执行文件[2]

/usr/bin/pulseaudio
#!/bin/sh
if [ "$1" == "--version" ]; then
    pactl info | grep Server\ Name | sed -e "s/Server Name: //"
else
    echo "This is a dummy file for apps that check if pulseaudio is available by checking for the binary existing"
fi

使其成为 可执行文件

端点分析 (EPA)

本文或本章节需要改进语言、wiki 语法或风格。请参考 Help:Style

原因: 许多风格问题。(在 Talk:Citrix 中讨论)

如果您的公司激活了可选的端点分析来检查您的计算机是否满足某些要求,您将必须安装另一个组件 EPA-Plugin。 它似乎是一个使用旧版 NPAPI 的浏览器插件,但现在它只是一个浏览器使用 “nsgcepa://” 协议处理程序调用的应用程序。 以下是您必须执行的操作才能使其运行

  • 步骤 1. 从您公司的 Citrix 网关下载 EPA 插件。 打开您公司的 Citrix 网关 URL 将尝试立即启动端点检查,这 (当然) 会失败,因为您尚未安装 EPA 插件。 在错误消息下方,您将看到一个用于下载 nsepa.deb 的按钮。 下载它。
  • 步骤 2. 使用 debtap 将 Debian 软件包转换为 Arch 软件包。 您可能需要先安装 debtapAUR
    # debtap nsepa.deb
    将软件包命名为 “nsepa” 并使用建议的版本。 像这样安装它
    # pacman -U nsepa-1.0.0.35-1-x86_64.pkg.tar.xz

最新版本的 EPA 链接到 libcurl-gnutls,现在您已完成。 不幸的是,您的公司可能使用旧版本,该版本存在以下问题

$ ldd /opt/Citrix/Browser-EPA/nsgcepa
/opt/Citrix/Browser-EPA/nsgcepa: /usr/lib/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by /opt/Citrix/Browser-EPA/nsgcepa)
	linux-vdso.so.1 (0x00007fff33f4f000)
	libX11.so.6 => /usr/lib/libX11.so.6 (0x00007fe4401d9000)
        [...]

如您所见,nsgcepa 可执行文件 (它是 nsepa 的主要可执行文件) 已链接到包含 “CURL_OPENSSL_3” 符号的 libcurl.so.4。 我认为这是一个来自 Ubuntu 的修补版本,我找不到 Arch 软件包提供它,甚至 libcurl-compat 也没有。 不幸的是,您必须自己找到合适的 lib。 我在 Steam 运行时下的 ~/.local/share/Steam/ubuntu12_32/steam-runtime/usr/lib/x86_64-linux-gnu 中找到了一个。

  • 故障排除 - 步骤 1. 创建一个用于修补库文件的目录,并将 libcurl.so.4 复制到其中。 还要复制依赖项。
# mkdir /opt/Citrix/lib
$ cd ~/.local/share/Steam/ubuntu12_32/steam-runtime/usr/lib/x86_64-linux-gnu
# cp libcurl.so.4 /opt/Citrix/lib
# cp libhogweed.so.4 libnettle.so.6 librtmp.so.0 libidn.so.11 /opt/Citrix/lib
  • 故障排除 - 步骤 2. 为了使用这些库而不是系统的库,我们必须调整调用 nsgcepa 的方式。 nsepa 软件包中提供了一个 .desktop 文件:/opt/Citrix/Browser-EPA/nsgcepa.desktop。 将 Exec 行更改为
    Exec=env LD_LIBRARY_PATH=/opt/Citrix/lib LD_PRELOAD=/opt/Citrix/lib/libcurl.so.4 /opt/Citrix/Browser-EPA/nsgcepa
  • 故障排除 - 步骤 3. .desktop 文件已复制到系统期望的位置:/usr/share/applications/。 用您的新文件覆盖它。
    $ cp /opt/Citrix/Browser-EPA/nsgcepa.desktop /usr/share/applications/

现在再次转到您公司的 Citrix URL。 EPA 应该运行。 如果它没有运行,您应该检查 “nsgcepa://” 的协议处理程序是否工作

$ xdg-open nsgcepa://something.com

如果它回答 “gio: nsgcepa://something.com: The specified location is not supported” 或 “klauncher said: Unknown protocol 'nsgcepa'”,您需要手动添加协议处理程序

$ xdg-mime default nsgcepa.desktop x-scheme-handler/nsgcepa

如果 EPA 仍然失败,您应该询问您公司的 Citrix Netscaler 管理员是否完全禁用了 Linux 登录。 似乎在这种情况下没有相应的错误消息,而是错误消息与您根本没有安装 EPA 插件时相同。

故障排除

  • 如果您在使用 Firefox 打开 Citrix 连接时遇到问题,您可能需要在 Firefox 附加组件管理器插件设置下将 Citrix Receiver 插件设置为 “总是激活”。
  • 可能需要 perl-file-mimeinfo 来正确解释 .ica 文件 mimeinfo 并按照 wfica.desktop 中的设置打开它
  • 如果您在 Citrix 下遇到光标对齐问题,并且您的计算机连接了多个显示器,您可能需要在使用 Citrix 时禁用除一个以外的所有显示器。
  • 如果您在登录会话后遇到粘滞 Control Ctrl 键问题,您可以使用此 指南 解决它
  • i3 上,Citrix 可能会全屏并捕获所有键盘输入。 一种解决方法是禁用全屏模式。 参见 https://bbs.archlinux.org/viewtopic.php?id=242398
    提示: 如果 Sway 中的键盘无法正常工作,设置 TWIMode=* 可能会有所帮助。
~/.ICAClient/All_Regions.ini
[Virtual Channels\Seamless Windows]
TWIMode=0

[Virtual Channels\Thinwire Graphics]
DesiredColor=8
ApproximateColors=*
DesiredHRES=1024
DesiredVRES=768
ScreenPercent=*
UseFullScreen=false
TWIFullScreenMode=false
NoWindowManager=false
  • 如果 Alt+Tab 在 GNOME Wayland 上的远程 Citrix 会话中不起作用,则以下两个设置将启用按键直通。
$ gsettings set org.gnome.mutter.wayland xwayland-grab-access-rules "['Wfica']"
$ gsettings set org.gnome.mutter.wayland xwayland-allow-grabs true
  • 如果 ICAClient 用错误消息淹没了 journal,一个简单的修复方法是在 Citrix Workspace 首选项中禁用所有日志记录。
  • 如果从 Firefox 启动会话时,VDI 中的时区重置为 UTC,您可能需要转到 about:config 并设置 privacy.resistFingerprinting=false。 此功能会将浏览器的时区欺骗为 UTC,然后将其重定向到 Citrix 会话。

注意:在编写本文时,privacy.resistFingerprinting.exemptedDomains 设置不能用于排除您公司的自助服务门户,因为它仍在测试中且未完全工作。 未来可能不再是这种情况。

Microsoft Teams 音频重定向故障排除

  • 如果 Windows 在 VDI 内部检测到音频设备,但 MS Teams 未检测到,请检查 HdxRtcEngine 进程是否在您的客户端计算机上运行
$ ps -ef | grep HdxRtcEngine

如果未运行,则该进程可能已崩溃。 查找任何未安装或从错误路径加载的库

$ ldd /opt/Citrix/ICAClient/util/HdxRtcEngine

在大多数情况下,您可能缺少其中一些库。 特别是 libunwind 可能安装在与 Citrix 尝试加载它的路径不同的路径中。 在这种情况下,执行以下操作来修复该问题

# ln -s /usr/lib/libunwind.so /usr/lib/libunwind.so.1

另一个可能导致 HdxRtcEngine 进程崩溃的原因是 gpsd 的不兼容版本 (在编写本文时)。 从 Arch Linux Archive 降级到版本 3.18-2 可能会解决此问题

# pacman -U https://archive.org/download/archlinux_pkg_gpsd/gpsd-3.18-2-x86_64.pkg.tar.xz

注意:您实际上不需要启动 gpsd 服务,只需安装兼容的 libgps 即可。

  • 当从 Firefox 启动会话时,通话会在几分钟后中断或音频掉线,这可能与 Firefox 设置的资源限制有关,Citrix 进程会继承这些限制。 您可以通过在会话运行时运行 $ prlimit --rttime --pid=$(pgrep HdxRtcEngine) 来检查这一点。 如果软限制或硬限制显示与无限制 (大多数系统上的默认值) 不同的任何值,您可能必须运行 # prlimit --rttime=unlimited --pid=$(pgrep HdxRtcEngine) 来修复该问题。 请注意,当您关闭并重新打开会话时,限制会重置,因此您每次都必须设置它们。

或者,您也可以从 chromium 或其他基于 Chromium 的浏览器启动会话。