树莓派配置x2go远程访问
引言
上一篇文章介绍了如何基于xrdp使用远程桌面访问树莓派,感觉还有些卡顿,不知道是否其他的方式,想到原来使用NoMachine体验还可以。查了一下,x2go是对Nomachine所使用的NX协议的开源实现。因此,尝试使用x2go的方式远程访问树莓派(Manjaro )。幸运的是,最后成功了。
服务端配置过程
完整的配置过程大概包括以下步骤:
graph LR 下载修改脚本 --> 编译安装软件 --> 配置连接信息
下载并修改代码
x2go没有提供Manjaro ARM Linux版本的预编译文件或者编译脚本,所以我们需要自己编译x2go之前是在官方的extras库里,2022年4月移到了AUR中。我们需要从AUR编译安装的有两个包:
其中,nx是x2goserver的依赖。
下载方式:
1 | cd ~ |
这样会在x2goserver
和nx
文件夹下看到分别看到各自的PKGBUILD
文件。
修改PKGBUILD文件
分别打开两个PKGBUILD
文件,找到架构内容:
1 | aarch=('x86_64') # 原来的架构信息 |
编译安装程序包
编译
使用修改后的PKGBUILD
文件进行编译:
1 | # 编译x2goserver |
编译成功,生成*.zst
文件。
安装
安装的命令为:
1 | sudo pacman -U *.pkg.tar.zst |
注意安装的顺序,首先安装nx
,然后安装x2goserver
。
安装的结果:
完善配置
跳过颜色管理器密码认证
如果没有这一步,在通过x2go连接成功以后,可能会遇到连续弹窗要去输入密码,弹窗的信息大致如下:
Authentication is required to create a color profile/managed device”
查了一下,在Ubuntu上使用xrdp进行远程连接时经常会遇到这个问题,核心原因是系统使用的应用授权框架Polkit
对远程登录用户和本地用户采取不同的授权策略。
PolKit 是一个应用程序授权框架,它将捕获用户执行的操作并检查该用户是否有权在系统上执行此类操作。 PolKit 读取一些策略文件,这些文件将指定用户请求的用户是否已授权、未授权或需要身份验证。 Polkit 提供了一种根据请求的操作对用户实施细化授权的方法。
当上执行远程登录并出现弹出窗口时,这仅表示此操作的 Polkit Policy 文件必须先进行身份验证才能执行。 现在,如果您在系统本地登录,则不会显任何弹出窗口,因为 Polkit 应用程序已评估此操作不需要身份验证。 这意味着 Polkit 可以区分本地会话和远程会话。 这也意味着不同的授权策略适用于本地会话和远程会话。
PolKit 应用程序读取一些 XML 文件以评估哪个用户被授权或未被授权。 其中一些文件位于以下位置 /usr/share/polkit-1/actions 下。 如果列出此文件夹的内容,您会看到有一个名为 org.freedesktop.color.policy 的文件。
修改的方式很简单,可以分为两种:
-
修改系统自带的
/usr/share/polkit-1/actions
下的org.freedesktop.color.policy
文件,将allow_any
的值改从no
改为yes
。1
2
3
4
5
6(....)
<defaults>
<allow_any>yes</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>
</defaults> (...) -
在
/etc/polkit-1/rules/rules.d
下增加一项规则文件45-allow-colord.rules
,注意:- 数字前缀代表优先级(小于50代表高于系统默认的规则)
- 文件后缀必须是
.rules
- 中间名字可以任取
然后添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.color-manager.create-device" ||
action.id == "org.freedesktop.color-manager.create-profile" ||
action.id == "org.freedesktop.color-manager.delete-device" ||
action.id == "org.freedesktop.color-manager.delete-profile" ||
action.id == "org.freedesktop.color-manager.modify-device" ||
action.id == "org.freedesktop.color-manager.modify-profile") {
return polkit.Result.YES;
}
});
两种方式均可,我使用了第二种。
创建数据库
在服务器端执行下列命令以初始化 x2go 服务器运行所需的 SQLite 数据库:
1 | x2godbadmin --createdb |
启动服务
1 | sudo systemctl enable x2goserver.service |
客户端配置过程
以Windows为例说明x2go客户端的配置过程。
下载安装
从x2go官网下载客户端安装即可,具体参见:
https://wiki.x2go.org/doku.php/download:start
配置连接
打开X2go Client,创建新的Session,填写信息:
-
Server的信息就是SSH连接使用的地址、端口号和用户名,稍后启动Session时会要求输入对应密码;
-
在桌面环境的选项里,需要自定义桌面,输入命令:
1
startplasma-x11
-
Media选项卡下禁用声音支持,因为根据网上的资料和我实际的测试,pulseaudio的配置比较麻烦,而实际用处不大。
然后启动即可。
启动测试
Bingo!
存在问题
-
Deprecated option UsePrivilegeSeparation
在Windows 11上,创建远程连接的时候会弹出命令行警告如下:
可能会导致文件夹共享失败,具体可参见:
- https://www.reddit.com/r/linuxquestions/comments/slzyda/x2go_deprecated_option_issue/
- https://lists.x2go.org/pipermail/x2go-user/2022-September/006859.html
这个可能是x2go 客户端的问题,并且尚未得到修复。
-
桌面的分辨率问题
即使在Session的配置文件里设定了屏幕的分辨率,实际连接成功后的分辨率也可能与设定值并不相同,可能是由于桌面环境在之前的Seesion已经设定了分辨率,而桌面的分辨率不会随着新的连接进行调整。
可行的解决办法就是,每次在结束远程连接的时候要退出桌面环境。
小结
通过摸索,实现了基于x2go访问采用Manjaro ARM Linux + KDE Plasma 5的树莓派,感觉良好。不过x2go本身可能还是存在一些问题,姑且作为一种候选的方案。