如何通过 XRDP 获得完整的 Ubuntu Gnome 体验

Kev*_*ter 6 linux remote-desktop x-windows gnome3 ubuntu-18.04

如何通过 XRDP 获得完整的 Ubuntu Gnome 体验而不是通用的 Gnome 体验?

当我从控制台登录时,我得到了 Gnome 的 Ubuntu 自定义:Dock 是一条从屏幕的一个边缘延伸到另一边缘的条纹,并且“设置”应用程序有一个 Dock 条目。

当我通过 XRDP 登录时,它看起来像通用 Gnome:扩展坞仅大到足以包含其图标,并且“设置”没有扩展坞条目。更重要的是,我的“Ubuntu”桌面上有一堆图标,这些图标在“通用”桌面上是不存在的。

我读过,“Ubuntu 停靠设置只能从 Ubuntu 定制的 GNOME 会话访问,而不是从默认的 GNOME 会话访问”,所以这就是为什么我认为我通过 XRDP 获得通用 GNOME。

  • 我运行的是 Ubuntu 18.04.3 并选择了“Ubuntu”窗口管理器。
  • 我已经安装了xdrp。
  • gnome-session --session=ubuntu我使用chmod +x创建了一个 .xsession 。

在创建之前.xsessionps显示gnome-session-binary --session=ubuntu控制台会话和gnome-session-binaryXDRP 会话。创建.xsession(并重新启动)后,两个会话都包含--session=ubuntu,但 XRDP 会话仍然看起来像通用 Gnome,并且缺少我的桌面图标。

我检查了$XDG_CURRENT_DESKTOP。在控制台上是这样ubuntu:GNOME。在 XRDP 上它是“GNOME”。所以我启动了--session=ubuntu,但它似乎已经丢失了。

如何通过 XRDP 获得完整的 Ubuntu Gnome 体验而不是通用的 Gnome 体验?

小智 16

他们的 git repo 论坛上的一个帖子对此进行了介绍。激活完整桌面体验的一种相对简单的方法是编辑startwm.sh位于/etc/xrdp/startwm.sh其下的脚本,如下所示:

#!/bin/sh
# xrdp X session start script (c) 2015, 2017 mirabilos
# published under The MirOS Licence

if test -r /etc/profile; then
    . /etc/profile
fi

if test -r /etc/default/locale; then
    . /etc/default/locale
    test -z "${LANG+x}" || export LANG
    test -z "${LANGUAGE+x}" || export LANGUAGE
    test -z "${LC_ADDRESS+x}" || export LC_ADDRESS
    test -z "${LC_ALL+x}" || export LC_ALL
    test -z "${LC_COLLATE+x}" || export LC_COLLATE
    test -z "${LC_CTYPE+x}" || export LC_CTYPE
    test -z "${LC_IDENTIFICATION+x}" || export LC_IDENTIFICATION
    test -z "${LC_MEASUREMENT+x}" || export LC_MEASUREMENT
    test -z "${LC_MESSAGES+x}" || export LC_MESSAGES
    test -z "${LC_MONETARY+x}" || export LC_MONETARY
    test -z "${LC_NAME+x}" || export LC_NAME
    test -z "${LC_NUMERIC+x}" || export LC_NUMERIC
    test -z "${LC_PAPER+x}" || export LC_PAPER
    test -z "${LC_TELEPHONE+x}" || export LC_TELEPHONE
    test -z "${LC_TIME+x}" || export LC_TIME
    test -z "${LOCPATH+x}" || export LOCPATH
fi

if test -r /etc/profile; then
    . /etc/profile
fi

test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
Run Code Online (Sandbox Code Playgroud)

注意:请勿删除并替换它,因为这会导致xrdp启动失败。sed例如,只需编辑该文件即可。这里我从第 4 行开始添加 3 行。它们将从第 4 行追加到第 6 行。

sudo sed -i '4 i\export XDG_CURRENT_DESKTOP=ubuntu:GNOME' /etc/xrdp/startwm.sh
sudo sed -i '4 i\export GNOME_SHELL_SESSION_MODE=ubuntu' /etc/xrdp/startwm.sh
sudo sed -i '4 i\export DESKTOP_SESSION=ubuntu' /etc/xrdp/startwm.sh
Run Code Online (Sandbox Code Playgroud)

最终文件如下所示:

#!/bin/sh
# xrdp X session start script (c) 2015, 2017 mirabilos \
# published under The MirOS Licence
export DESKTOP_SESSION=ubuntu
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME

if test -r /etc/profile; then
    . /etc/profile
fi
if test -r /etc/default/locale; then
    . /etc/default/locale
    
    test -z "${LANG+x}" || export LANG
    test -z "${LANGUAGE+x}" || export LANGUAGE
    test -z "${LC_ADDRESS+x}" || export LC_ADDRESS
    test -z "${LC_ALL+x}" || export LC_ALL
    test -z "${LC_COLLATE+x}" || export LC_COLLATE
    test -z "${LC_CTYPE+x}" || export LC_CTYPE
    test -z "${LC_IDENTIFICATION+x}" || export LC_IDENTIFICATION
    test -z "${LC_MEASUREMENT+x}" || export LC_MEASUREMENT
    test -z "${LC_MESSAGES+x}" || export LC_MESSAGES
    test -z "${LC_MONETARY+x}" || export LC_MONETARY
    test -z "${LC_NAME+x}" || export LC_NAME
    test -z "${LC_NUMERIC+x}" || export LC_NUMERIC
    test -z "${LC_PAPER+x}" || export LC_PAPER
    test -z "${LC_TELEPHONE+x}" || export LC_TELEPHONE
    test -z "${LC_TIME+x}" || export LC_TIME
    test -z "${LOCPATH+x}" || export LOCPATH
fi

if test -r /etc/profile; then
    . /etc/profile
fi
test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
Run Code Online (Sandbox Code Playgroud)

之后,systemctl restart xrdp.service或者重新启动你的机器,它应该可以正常工作。这是重新启动后我的 xrdp 会话。

已激活具有 gnome 桌面体验的 Xrdp