树莓派安装配置Manjaro Linux
引言
买了很久的树莓派一直没有充分用起来,最近觉得不能再让它继续吃灰了。想在树莓派上安装Manjaro Linux,并且开启xrdp远程桌面,把配置的过程做一个记录,便于以后参考。
配置简介
硬件
- 树莓派4b 8GB内存版
- 固态U盘(256GB)
选用固态U盘是因为,与micro SD卡相比,能够获得更高的读写速度,有助于提升系统的性能。
软件
- Manjaro Linux 22.12 minimal
- KDE Plasma 5
- xrdp相关组件
基本流程
graph LR; imager[烧录镜像] --> install[安装Manjaro Linux] --> kde[安装KDE Plasma] --> rdp[配置远程桌面]
说明:
- 镜像烧录到前面准备的U盘,而不是micro SD卡;
- 通过SSH安装Manajaro Linux minimal版。
具体配置过程说明如下。
配置步骤
Manjaro Linux 安装
因为我的树莓派没有外接显示器,所以只能通过SSH远程来安装。
烧录镜像
- 烧录软件:使用树莓派官方提供的Raspberry Pi Imager。
- 选择镜像:打开Imager,选择Manjaro Arm Minimal 22.12。
- 选择SD卡:打开Imager,选择插上的U盘即可。
- 点击烧录即可。
SSH安装Minimal版本
根据Manjaro的官方说明,Manjaro ARM 从22.02版本开始引入Calamares
作为初次安装工具。由于Calamares
是基于QT的图形应用,所以无法通过命令行安装,因此Manjaro ARM的桌面版本不再支持SSH安装,只能通过SSH安装Minimal版本。具体可参见:
https://forum.manjaro.org/t/manjaro-arm-22-02-released/104156
树莓派联网
将烧录好系统镜像的U盘插到树莓派的USB 3.0接口,插上电源和网线,启动树莓派。如果是路由器下的局域网可以通过路由器查看树莓派的IP地址。另外,也可以使用nmap等端口扫描工具查找树莓派的地址。
以nmap为例,具体命令为:
1 | nmap -sn 192.168.1.0/24 | grep -B 2 Pi |
-sn
为仅进行主机发现,不进行端口扫描;192.168.1.0/24
为所在局域网网段;grep -B 2 Pi
为找到"Pi"所在的行及其前两行。
说明:
-
可以通过网线将计算机与树莓派直连,直接找到树莓派的IP地址;
-
在进行主机扫描时,可能不一定有"Raspiberry Pi"的主机名,这个时候可以根据MAC地址来匹配:
找到树莓派的IP地址后,就可以通过SSH连接树莓派,使用的用户名为root
,密码为空,仅初始安装有效:
1 | ssh root@raspi_ip # raspi_ip为树莓派的IP地址 |
系统安装
SSH连接上树莓派后,会自动进入安装界面。主要包括:
- 选择键盘布局(使用us键盘布局)
- 输入用户名
- 添加用户组(默认即可)
- 设置密码
- 设置用户全名
- 选择时区(中国大陆选择
Asia/Shanghai
) - 选择语言(简体中文为
zh_CN.UTF-8
) - 输入主机名
- 确认信息
以下是部分安装截图
如果信息准确无误,就可以选择Yes,树莓派将会完成安装并重启,等待几分钟,让树莓派完成重启。如果需要修改,选择No,安装会回到第一步重新开始。
源与包管理
设置更新源
与其他linux类似,Manajaro Linux安装完后也需要设置更新源,稍微有些区别的是Manjaro ARM的源包括几个部分:
-
基本镜像源
1
sudo pacman-mirrors -i -c China -m rank
-
archlinuxarm源
编辑 /etc/pacman.d/mirrorlist, 在文件的最顶端添加:
1
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/$arch/$repo
-
archlinuxedu源
Arch4edu 是面向高校用户推出的非官方软件仓库, 支持 Arch Linux 和 Arch Linux ARM, 主要包含高校用户常用的科研、教学及开发软件。
- 导入 GPG key
1
2
3# pacman-key --recv-keys 7931B6D628C8D3BA
# pacman-key --finger 7931B6D628C8D3BA
# pacman-key --lsign-key 7931B6D628C8D3BA- 在
/etc/pacman.conf
文件末尾添加以下内容:
1
2[arch4edu]
Server = https://mirrors.tuna.tsinghua.edu.cn/arch4edu/$arch -
archlinuxcn源
Arch Linux 中文社区仓库 是由 Arch Linux 中文社区驱动的非官方用户仓库。包含中文用户常用软件、工具、字体/美化包等。
在
/etc/pacman.conf
文件末尾添加以下两行:1
2[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch之后安装
archlinuxcn-keyring
包导入 GPG key。
添加完源之后,更新pacman数据库以及整个系统
1 | sudo pacman-mirrors -g #更新源列表 |
安装yay
pacman
是Arch/Manjaro Linux的官方包管理器,yay
是一个第三方包管理器, 除了能够查询安装官方包以外,还可以安装AUR仓库的软件。后面在安装xrdp
时会用到。使用pacman
安装yay
:
1 | sudo pacman -S yay |
yay会优先使用pacman搜索和安装软件包,pacman找不到才会去aur找,如果一个包同时存在于pacman和aur,用yay和用pacman的效果是一模一样的。总结一下 yay 安装软件的方式:
1 | yay -S onlyoffice-bin # 如果仓库有就安装,没有才从 AUR 安装 |
安装桌面环境
如果只是将树莓派作为一个服务器使用,实际上是可以不用安装桌面环境的,不过我还是想体验下。Manjaro ARM Linux本身也支持多种桌面环境,包括:
- KDE Plasma 5
- Xfce
- GNOME 3
- LXDE
- MATE
- Cinnamon
- ……
我选择了KDE Plasma 5。
安装KDE基本环境
1 | sudo pacman -S plasma kio-extras |
安装完基本环境以后,已经可以登录GUI界面,但是如果打开发现基本没什么可用的应用,还需要手动添加各种应用。如果只是为了省事,还可以直接安装KDE应用。
安装过程中有些软件包需要选择,我都是直接选择了1。
安装KDE应用
1 | sudo pacman -S kde-applications |
KDE应用及其依赖大概有400多个包,大小有3个多G。
安装中文字体
在安装Manjaro Linux的时候,如果选择了中文环境,那么安装好KDE桌面环境以后,很可能无法正常显示,而是一个个的方框,这是因为系统缺少中文字体,解决的办法也很简单:
1 | sudo pacman -S wqy-microhei |
注销重新进入桌面环境就可以了。
注意:
KDE Plasma 5内置了SDDM作为Dispaly Manager,并且官方推荐使用。但是实际上如果只是为了使用远程桌面,我们并不需要启用SDDM,直接通过startx进入图形界面即可。所以后来实际上我把SDDM相关的包都移除了。
配置远程桌面
我在以前的一篇文章"Mac、Linux、Windows远程桌面工具推荐"里曾经总结过各种不同的远程桌面工具。对于Linux常见的免费方案包括RDP和VNC两类,从体验上来看基于RDP的更加流畅。所以我也想为Manjaro ARM Linux配置xrdp服务,从而可以通过RDP远程访问。之前主要是基于Ubuntu的GNOME桌面配置xrdp,基于KDE还是第一次。网上有些资料,但不是很多,幸运的是还是成功了。
安装xrdp相关包
-
xrdp和xorgxrdp-git
xrdp
是一个微软远程桌面协议(RDP)的开源实现,它允许你通过图形界面控制远程系统。而xorgxrdp-git
则是xrdp
使用xorg
的驱动。如果安装的是
xorgxrdp-git
是直接从GitHub下载,需要配置上网方式;如果安装xorgxrdp
应该不需要(我没有试过)。注意:编译安装过程中会提示
xorgxrdp-git
可能与当前系统架构(aarch64)不兼容,但是仍然要继续编译。Should be possible to just add
aarch64
to thearch=()
line in the PKGBUILD and then build it.– https://forum.manjaro.org/t/an-arm64-version-of-xrdp/62352/2
1
yay -S aur/xrdp aur/xorgxrdp-git
-
xorg
安装好
xrdp
和xorgxrdp-git
以后,我尝试启动,结果虽然能够连接到RDP服务,但是一旦登录就会闪退,查了一下才发现,我的系统里根本没有xorg。xrdp本身不具备桌面服务功能,需要和图形化桌面配合,而xorg是X11的一个实现,提供一个X server,为xrdp提供桌面服务。在Ubuntu GNOME中xorg是默认的,但是在我安装的Manjaro ARM LInux Minimal + KDE Plasma 5中,需要手动安装。我们后面会以xorg的方式登录xrdp。
首先移除SDDM:
1
sudo pacman -Rsnc sddm sddm-kcm
然后安装xorg:
1
sudo pacman -Sy xorg
-
xorg-xinit
xinit程序允许用户手动启动 Xorg 显示服务器。startx 脚本是 xinit 的一个前端。可以用 xinit 在没有窗口管理器的情况下运行 GUI 应用程序。
复制配置文件
根据网上的说明,为了正常启动需要修改~/.xinitrc
文件,但是在我的用户文件夹下并没有这个文件。可能的原因也是我安装的是Minimal版本再安装桌面环境,再安装xorg相关程序,所以没有这个文件。
安装好xorg-xinit
以后,会有/etc/X11/xinit/xinitrc
这个文件,可以复制到用户文件夹下:
1 | cp /etc/X11/xinit/xinitrc ~/.xinitrc |
但是,进一步地又发现,这个文件中没有许多资料中提到的get_session()
等函数,而如果想要这样的.xinitrc
文件可以到Manjaro官方的GitLab项目中复制,具体参见:
(好像安装manjaro-kde-settings
也可以,但是我没有试过)
~/.xinitrc
可以方便地在X服务器启动时运行依赖于X的程序并设置环境变量。如果它存在于用户的主目录中,startx 和 xinit 会执行它。否则 startx 将运行默认的/etc/X11/xinit/xinitrc
。
修改配置
在完成了前面的准备工作以后,才是修改配置实现RDP远程桌面的重头戏。
-
允许任何人启动X Server
将
allowed_users=anybody
添加到/etc/X11/Xwrapper.config
以允许任何人启动 X 服务器。如果
/etc/X11/Xwrapper.config
不存在则需要先创建一个。 -
防止黑屏
连接成功后黑屏的原因可能是D-Bus 未正确初始化造成的。两种修改方案:
-
修改
/etc/xrdp/starwm.sh
1
2
3
4
5
6
7arch user
if [ -r ~/.xinitrc ]; then
. ~/.xinitrc # <-- Do not call this line; it will crash
eval $(dbus-launch --sh-syntax) # Add these 2 lines, in order to...
startplasma-x11 # ...start plasma directly instead of calling . ~/.xinitrc
exit 0
fi从这个命令可以看出来,其实质时根据
~/.xinitrc
来判断是Arch User,然后直接执行命令。 -
修改
~/.xinitrc
-
如果是从GitLab下载的Manjaro 提供的
~/.xinitrc
,则需要修改两处:1
2DEFAULT_SESSION=startkde # <-- bug, the startkde command no longer exists
DEFAULT_SESSION=startplasma-x11以及
1
2
3get_session(){
#local dbus_args=(--sh-syntax --exit-with-session) # <-- the '--exit-with-session' flag causes hang
local dbus_args=(--sh-syntax) -
如果是从
/etc/X11/xinit/xinitrc
复制过来的,则是:1
2
3
4
5
6
7
8
9
10注释掉最后5行
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login
然后添加我们的配置
eval $(dbus-launch --sh-syntax)
startplasma-x1
-
还有一种黑屏,我在Ubuntu曾经遇到过,是因为在本地和远程使用同一个账号登录桌面造成的,具体参见:
-
-
其他
- 通过修改
/etc/xrdp/xrdp.ini
可以高度自定义会话管理器 ,例如远程桌面的端口号。 - 用于启动 Xorg 和 Xvnc 显示服务器的参数可以在
/etc/xrdp/sesman.ini
中配置。
- 通过修改
启动服务
配置完成,启动相关服务
1 | sudo systemctl enable xrdp |
连接测试
使用RDP客户端,例如Windows自带的mstsc.exe
,输入树莓派的IP地址和端口号。
大功告成!
至于体验效果,我只能说一般。
小结
以上是在树莓派上通过SSH安装Manjaro Linux、KDE Plasma 5桌面环境并配置xrdp远程桌面的完整过程。通过这个过程,对xrdp的相关机制更加熟悉了。