前言
为什么使用xrdp远程连接而不使用更流畅的XServer?
在实际的使用中,XServer会遇到频繁的窗口崩溃问题,一旦窗口崩溃(也可能是我的配置问题,但始终没有找到解决方案),将立即终止整个桌面会话,这十分影响使用。xrdp会后台保留会话,而不是结束远程连接立即结束会话。虽然卡顿,但是目前使用来看,其十分稳定,流畅度基本够用。
离线安装WSL2
- 开启 Windows Subsystem for Linux 选项
以超级管理员方式打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),运行一下命令:dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- 检查WSL2运行依赖
- 对于 x64 系统:版本 1903 或更高版本,采用内部版本 18362 或更高版本。
- 对于 ARM64 系统:版本 2004 或更高版本,采用内部版本 19041 或更高版本。
- 低于 18362 的版本不支持 WSL 2。 使用 Windows Update 助手更新 Windows 版本
- 启用虚拟机功能
安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。
以管理员身份打开 PowerShell 并运行。
重新启动计算机,以完成 WSL 安装并更新到 WSL 2。dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 下载 Linux 内核更新包
下载最新包:适用于 x64 计算机的 WSL2 Linux 内核更新包
运行上一步中下载的更新包。 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)
安装完成后,请继续执行下一步 - 在安装新的 Linux 分发时,将 WSL 2 设置为默认版本。 (如果希望将新的 Linux 安装设置为 WSL 1,请跳过此步骤。) - 将 WSL2 设置为默认版本
wsl --set-default-version 2
下载并安装WSL系统发行版
-
下载WSL的Linux发行版:微软官网下载地址
这里使用Ubuntu 18.04 作为安装镜像,最新的22.04TLS版本有了更加完善的安装引导界面。
-
将下载的文件解压到你想安装到的目录
此处是为了能够自定义安装目录,如果不需要,也可以双击安装已下载的文件
将上面已下载的文件拓展名更改为zip
将上面的文件解压到你想要安装到的目录,然后进入到目录中
双击运行ubuntu1804.exe文件(不同的系统可执行文件名不同,但是使用方法相同)
- 等待系统安装完成
- 根据提示分别输入即将创建的Ubuntu系统账号和密码
- 安装完成
安装Xfce桌面与XRDP远程
- 进入WSL容器
- 根据手册替换Ubuntu默认apt源
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
- 执行安装命令(安装过程会比较漫长)
关于依赖安装 xfce4-goodies 在18.04中可以不安装,但是在高版本中必须安装,否则无法连接xrdp
下图一路回车sudo apt update && sudo apt install -y xfce4 xfce4-goodies xrdp
- 为当前用户指定登录session类型
echo "xfce4-session" > ~/.xsession
- 修改xrdp运行端口
防止与Windows自带的xrdp服务端口冲突sudo vim /etc/xrdp/xrdp.ini # 修改下面这一行,将默认的3389改成其他端口即可 # port=3390
- 配置中文(如果不需要可以跳过)
- 设置中文环境
如图选择,回车sudo dpkg-reconfigure locales
如图选择并回车
安装中文字体sudo apt-get install -y ttf-wqy-zenhei xfonts-intl-chinese wqy*
- 设置中文环境
启动XRDP服务
由于WSL2里面不能用systemd,所以需要手动启动
sudo /etc/init.d/xrdp start
开机自动启动Xrdp和Docker
以下是脚本内容,根据需要启动的服务和当前root账户密码做修改。
- 将脚本保存到任意有权限访问的目录,并使用chmod +x 脚本路径,添加可执行权限
- 复制脚本据对路径,然后添加到 ~/.bashrc 的最后一行,并保存
- 开机后打开一次终端即可开启服务
#!/bin/bash
root_password="此处替换为root账户登录密码"
my_sudo(){
echo "$root_password" | sudo -S $1
}
# 启动xrdp服务
if [ -z "$(pgrep xrdp-sesman)" ]
then
my_sudo "/etc/init.d/xrdp start"
if [ $? -ne 0 ]
then
echo "failed to start xrdp service!"
fi
fi
# 启动docker服务
if [ -z "$(pgrep docker)" ]
then
my_sudo "service docker start"
if [ $? -ne 0 ]
then
echo "failed to start docker service!"
fi
fi
使用Windows自带的远程控制进行连接
自动填充账号和密码
sudo vim /etc/xrdp/xrdp.ini
找到如下的配置描述
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20
将username和password对应的ask设置成你需要登录的账号和密码,然后保存,重启WSL子系统。
关闭屏幕保护(防止长时间不操作卡死)
安装谷歌浏览器
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && sudo apt install -y ./google-chrome-stable_current_amd64.deb
安装中文输入法(需要在图形界面中操作)
- 卸载 IBus 输入法框架
Ubuntu 内置了 IBus 输入法框架,与 fcitx 冲突,需要事先卸载。sudo apt remove ibus*
- 安装所需要的软件包
安装后需要重启一次,以下命令需要在cmd中操作sudo apt install dbus-x11 fcitx im-config fcitx-sunpinyin fcitx-table-wubi
# 关闭WSL wsl --shutdown # 进入WSL wsl
- 配置输入法框架
fcitx-config-gtk3
-
在 Input Method 标签页中,点击对话框左下角的 + 号,增加中文输入法。注意,要把键盘方案放在上面,输入法放在下面,换句话说,就是保持 「Keyboard - English (US)」 在最上面,中文输入法都要在它下面。
-
在 Global Config 标签页中,注意默认的 Trigger Input Method (输入法切换)快捷键是 Ctrl + 空格。这个快捷键不会与 Windows 的输入法切换快捷键冲突,可以保留。如果要修改,不可以让新的快捷键与 Windows 的全局快捷键冲突,否则无效,例如,WIN + 空格是 Windows 切换输入法的全局快捷键,在 WSL Ubuntu 的 fcitx 中,就不能用这个快捷键来切换输入法。
-
安装搜狗输入法
搜狗输入法与Jetbrains存在兼容性问题,在IDE中输入文字时无法提示框会直接定位到桌面的最下脚无法正常显示,目前的解决方式是使用第三方修复的Jetbrains运行时。
- 下载Ubuntu的搜狗输入法安装包:https://shurufa.sogou.com/
进入网页找到Linux个人版
选择x86_64
- 根据官方安装指南进行安装:https://shurufa.sogou.com/linux/guide
- 修复搜狗输入法与Jetbrain的兼容性问题:inux系统解决jetbrain idea中搜狗输入法候选框无法跟随,教程中虽然是以IDEA为例子,理论上是支持所有Jetbrain的IDE,我在GoLand上也成功修复了这个问题。
WSL 数据文件
ext4.vhdx即为WSL的系统数据,可以将该文件拷贝到其他机器上,来恢复数据。
操作步骤:
- 在新电脑上完成本教程的前两个部分离线安装WSL2、下载并安装WSL系统发行版,切记在完成上面两个步骤之前不能将备份的WSL数据文件拷贝到安装目录中,否则将会被清空。
- 安装完成后执行,wsl --shutdown 命令关闭WLS,然后将备份的数据文件拷贝到安装目录中替换已经存在的文件。
- cmd中输入wsl再次启动就是已经恢复的数据了,但是这样WSL中的挂载的Windows盘符会出现冗余,这个取决于原安装机器的上的盘符列表。需要手动修复盘符问题,不过不修复也能够正常使用,这里就不再介绍方法,自行查找相关教程。