配置轻量级 Linux 远程开发环境(Fedora 38)
首先选一个发行版,需要软件源够全够新,但不一定每天都用,所以不要滚动更新。这次选择 Fedora Workstation 38,然后精简 GNOME 等服务,最终实现:
- 空闲时内存占用低于 300MB
- 桌面环境随用随开
基础配置
- 开启 sshd:
sudo systemctl start sshd
sudo systemctl enable sshd
- 修改主目录文件名为英文:
export LANG=en_US
xdg-user-dirs-gtk-update
转换后重新设置系统语言为 zh_CN
,重启,登录时选中不转换和不再提示。
- 删除不必要的第三方软件库:
sudo rm /etc/yum.repos.d/_copr\:copr.fedorainfracloud.org\:phracek\:PyCharm.repo
sudo rm /etc/yum.repos.d/rpmfusion-nonfree-steam.repo
- 安装 Go + nvim 开发工具:
sudo dnf install vim neovim go gcc-c++
删除软件更新服务
刚开机的内存占用就有 1.5GB,其中 packagekitd 占很大一部分。
PackageKit 是一个 dnf、apt 之类包管理工具的通用抽象层。但是我只用 dnf,不需要 gnome-software 等“高级”工具,更何况还有大量资源占用等问题。
所以把这两个组件删掉:
sudo dnf remove gnome-software PackageKit
节省了 600MB 内存。
关闭 GNOME 桌面环境
大部分时间是 SSH 使用,只有特殊情况才会 RDP 远程桌面连接。所以关闭 gdm(GNOME Display Manager) 来节省资源占用(参考):
sudo systemctl stop gdm
sudo systemctl disable gdm
需要时再手动开启:
sudo systemctl start gdm
节省了 600MB+ 内存。
远程桌面
需要使用桌面环境时,先启动 gdm,再远程连接。
自动登陆+解锁远程登陆密码
这个版本的远程桌面由 GNOME 内置实现,需要有一个正在运行的用户会话,所以要先用 VNC 登陆。
为了方便,可以设置 GNOME 自动登陆(文档):
# /etc/gdm/custom.conf
[daemon]
AutomaticLoginEnable=True
AutomaticLogin={{ username }}
但会发现每次自动登陆后远程桌面密码都被重置为了随机密码。这是由于系统上服务的密码是以加密形式存储于密钥环(keyring),默认密钥环的解锁密码就是登陆密码,在用户正常登录时会一起解锁。但自动登陆没有输入密码来解锁,所以 GNOME 读取不到其中中加密的远程登陆密码,就会随机生成一个新密码。
如果把默认的密钥环密码设置为空,系统上所有存储的密码都会是明文,不安全。
参考网友的方法,创建一个无密码的不安全密钥环来单独存放 RDP 密码:
- 安装密钥环管理工具,安装后可以找到「密码和密钥」应用:
sudo dnf install seahorse
- 在工具中,查看默认的「登陆」密钥环,里面应该已经存放了名为「GNOME Remote Desktop RDP credentials」的远程桌面密码,删除这条记录
- 创建一个新的密钥环,密钥环的密码设为空,将该密钥环设为默认
- 重启系统以应用新的默认密钥环
- 设置远程桌面密码,再次查看之前创建的新密钥环,里面应该已经有了「GNOME Remote Desktop RDP credentials」这条记录。之后远程桌面会使用该密钥环读取和设置密码
- 恢复默认密钥环为原先的「登陆」,重启系统
注意:要修改默认密钥环来让 GNOME 创建密码条目,这种记录会显示为「密码或密钥」,而手动创建的密码记录显示的是「已保存的便签」,测试发现不会被 GNOME 使用。
锁屏时使用远程桌面
根据 GNOME 远程桌面的设计,远程和本地的屏幕是同步的,本地屏幕锁定时,远程桌面的连接就会断开。
这与 Windows 接入远程桌面后就会让本地桌面自动进入锁定的运作方式不同。并且 GNOME 官方没有对这个功能请求做正式回复。
目前暂时关闭了自动锁屏。