EndeavousOS开发环境构建和配置

2023年 7月 19日 23.2k 0

最近基于工作的需求,需要安装和配置一个Linux桌面系统用于Node Web应用程序的开发和测试。一般情况下,开发工作是在Windows系统上完成的,使用的工具是VSCode。但是,开发完成之后,应用会部署到Linux系统上,Nodejs的执行环境和开发并不完全相同,所以可能偶尔会做一些部署、调试、分析和排错的工作,纯命令行方式的Linux有时候就不是那么方便了。 所以,笔者就想到可以使用一个Linux桌面环境来帮助完成这个工作。

 需求

基于上面的场景,笔者对这个系统的基本使用需求和要求是:

  • 轻量高效,而且在虚拟环境中也可以运行良好(因为现成的硬件包括老旧电脑甚至虚拟机系统)
  • 可以使用使用远程桌面进行操作,最好是RDP协议
  • 界面简单美观,选择要点是xfce4
  • 软件安装配置方便

经过相关的评估和对比,加之笔者想要尝试不同类型的Linux桌面系统,笔者选择了分别在老旧电脑和Proxmox虚拟环境中,安装和使用EndeavourOS(简称为EOS)操作系统。相关的需求满足要点如下:

  • EndeavourOS,基于Archlinux系统,相对而言其运行效率和资源占用方面有一定优势
  • 在远程桌面协议方面,选择RDP协议,在比较重的桌面操作体验方面要好于VNC,使用的软件包是xrdp
  • 和所有Linux发行版一样,EOS的桌面环境是可以选择的,我们选择xfce4这个比较轻量高效的版本
  • EOS是ArchLinux系列的,使用pacman作为包管理工具,笔者个人感觉其使用体验和简便性要好于apt和yum
  • 这些选择的缺点在于使用的广泛性略差,另外ArchLinux的发展策略相对更激进一点,可能会影响到一些稳定性

图为EOS操作系统桌面环境。

EndevourOS-Dark-mode-min.jpg

系统安装

我们以虚拟机安装为例,来说明一下这个系统的安装过程(其实几乎没有任何特别的地方)。

EOS本身定位于桌面操作系统。所以其安装过程是基于一个LiveCD系统的,没有像Debian一样的可选完全网络和命令行安装方式。这个LiveCD可以在这个地址下载(不到2G,比较轻量):

endeavouros.com/latest-rele…

下载ISO文件后,如果在实体机上安装,需要将其写入U盘。如果在虚拟机上安装,需要上传到虚拟机管理平台上,配置虚机使用ISO文件进行启动。LiveCD启动后,其实就进入了一个临时的EOS系统,同时会运行一个系统安装程序,让用户可以将系统安装到系统硬盘上。

可能需要注意这个系统在全球的软件库分布并不是特别多,在中国安装尽量使用离线方式。另外它的磁盘分区功能使用比较奇怪,当然我们如果是安装单一系统和单一硬盘就比较简单,直接使用整个磁盘并初始化即可。安装过程还是比较顺利,和一般的CentOS GUI安装过程并无大异。

图为EOS LiveCD运行环境和安装工具。

R-C.png

安装后配置

在安装完成重新启动后,一般需要再做一些可能的操作和配置。包括:

  • 检查和配置主机时间

date

sudo ntpdate pool.ntp.org

  • 更新密钥

应当经常性的更新archlinux的软件公钥集合,否则很容易出现软件包验证错误的信息。

sudo pacman -S archlinux-keyring

  • 系统更新

使用下列命令可以进行系统的更新:

sudo pacman -Syu

  • 安装其他常用软件

sudo pacman -S net-tools curl htop

  • 打开和管理防火墙

ArchLinux系统一般使用firewalld来管理防火墙。当然EOS也可以使用防火墙管理工具和图形界面来管理防火墙。

  • 后续工作

简单的使用后,整体感觉还是不错的,包括UI,响应,软件的安装和配置过程,系统资源占用等等。但现在的主要问题是:

1 系统安装是使用的简体中文,安装完成后也是中文的界面,但没有直接内置输入法

2 没有内置的GUI远程访问方式 

这两点对于构造开发和测试环境是比较重要的。下面的步骤就是主要解决这两个问题。

输入法的安装和配置

输入法的安装,也不太顺利,反复了几次,主要原因是不太清楚应该选择哪些软件。按照网上的资料,首先选择使用fcitx5软件,但出现的问题主要是安装后,虽然可以切换输入法,但无法显示输入候选字面板。然后改为安装ibus,但ibus安装需要安装并编译python,过程很长,而且安装完成后仍然看不到候选字面板。

最后还是回答选择使用fcitx5作为输入法,但需要注意相关的安装和配置过程:

  • 安装软件模块

这个软件不在默认的ArchLinux软件库中,需要使用AUR(Archlinux User Reposity, 用户软件仓库)和yar命令安装。


$ yay -S fcitx5 fcitx5-configtool fcitx5-chinese-addons fcitx5-material-color

  • 检查并编辑 ~/.pam_environment 文件

增加以下内容

GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE DEFAULT=fcitx
XMODIFIERS DEFAULT=@im=fcitx
SDL_IM_MODULE DEFAULT=fcitx 
  • 注销或者重启后,在开始菜单中选择并启动fcitx。

打开任意文本编辑程序,切换到中文输入法,应该就可以进行中文输入了。

  • 故障排查

如果上述设置不能生效,如表示出无法切换输入法和选字面板,可能是由于环境变量没有正常加载,检查方式为:

echo $GTK_IM_MODULE

经过研究,可能需要直接修改 /etc/environment 文件(而且不能使用上述设置格式,设置完成后需要重启):

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

XRDP的安装和配置

xrdp是linux系统上,可以作为rdp服务端支持rdp连接的软件。Linux本来也有VNC远程桌面软件,但可能是由于协议和实现方式的差异,个人感觉起码在这个系统上,VNC运行的不如RDP好。

笔者还尝试了x11vnc,配置和使用确实方便,但问题是运行一段时间后,系统的运行效率明显降低,在加上VNC的一些功能性的缺失(剪切板共享),随后就放弃了这一方案。所以在可能的情况下,还是优先选择xrdp作为远程GUI操作的技术方案。

xrdp安装

在EOS系统上,笔者的XRDP也是几经尝试才安装成功的,看起来这个系统的成熟和兼容程度还是有一定的问题。

安装和测试前,最好先打开防火墙。RDP协议默认使用的端口是3389。

安装前,需要先安装一个VNC软件作为依赖,这里使用tigervnc,并使用pacman命令。

安装过程不复杂,主要使用yay命令,选择xrdp和xorgxrdp两个软件。这里xrdp应该就是主体程序,xorgxrdp是用于xorg作为后端来支撑的。默认情况xrdp会使用VNC作为后端,但可能使用xorg会更好一些,所以需要安装相关的支持组件。安装完成后,可以将xrdp和xrdp-sesman作为服务启动,相关的命令操作如下:

# sudo pacman -S tigervnc

$ yay xrdp xorgxrdp

$ sudo systemctl enable xrdp-sesman
$ sudo systemctl enable xrdp

$ sudo systemctl start xrdp-sesman
$ sudo systemctl start xrdp

$ sudo systemctl status xrdp-sesman
$ sudo systemctl status xrdp

// 检查侦听 3389和3150
$ netstat -lpnt

 
使用netstat -lpnt 检查端口状态,并确认相关的防火墙端口是打开的(EOS系统有图形化的防火墙配置程序)

配置xrdp

道理上来说,在服务端xrdp启动后,就可以使用RDP客户端进行连接和使用的。但可能是这个安装程序在EOS上没有进行正确的安装后配置的原因,连接并且登录后,系统会显示一个空的屏幕和有关于用户会话错误信息。 经过一段时间的研究和测试,发现需要再进行相关的手动配置,才可以正常连接和使用。

先简单的说明一下本人理解的XRDP的连接过程。XRPD服务启动后,RDP客户端软件,首先连接XRDP侦听的端口,连接正常建立后,xrdp会在窗口中展示一个二次连接菜单,用户可以在这里选择连接方式如xorg或者vnc等,并需要输入要创建会话的用户名和密码。选择和登录后,xorg会基于当前认证的用户身份运行一个启动程序(startwm.sh),启动窗口管理器,从而最终建立一个远程桌面连接。
 
所以,具体的检查和配置过程如下(完成后需要重启xrdp服务):

  • 检查/etc/xrdp/xrdp.ini

这个文件应该用于一些配置信息和菜单项目,确认里面有xorg相关的项目,如:

 [Xorg]  
name=Xorg  
lib=libxup.so  
username=ask  
password=ask  
ip=127.0.0.1  
port=-1  
code=20

  • 检查 /etc/xrdp/startwm.sh

查看wm_start这个方法,里面会通过检查 xinitrc这个文件,来决定执行的过程。如果没有匹配的方式,默认情况下会启动xterm。

由于默认情况下,EOS确实是应该没有 ~/.xinitrc 的项目,但存在/etc/X11/xinit/xinitrc这个文件,所以这就是EOS启动窗口管理器检查的内容。并且脚本程序会运行这个文件中的内容。

问题解决的重点应该就是编辑此文件中的内容,让其能够启动正确的窗口管理程序。

  • 检查 /etc/X11/xinit/xinitrc

根据场景和需要,我们应该编辑此文件中的内容。注释掉最后几行 xterm相关内容,并增加以下内容

#twm &
#xclock -geometry 50x50-1+1 &
#xterm -geometry 80x50+494+51 &
#xterm -geometry 80x20+494-0 &
#exec xterm -geometry 80x66+0+0 -name login

export XDG_SESSION_TYPE=x11
exec dbus-launch xfce4-session 

这两行命令,首先是先声明会话类型是x11,然后指定窗口管理器的会话类型为xfce4(所选择的桌面类型)。

  • ~/.xsession文件

如果有必要(如果存在),可能需要检查这个文件,确认如下内容:

xfce4-session

  • 快速替代解决方案

如果前面的操作都没有效果,如笔者就遇到了连接不能正常建立,提示如下的错误信息,或者其他无法连接的情况:

sesman_data_in scp_process_msg failed
sesman_main_loop: trans_check_wait_objs failed

这些可能都和sesman(会话管理器)相关,这时可以尝试以下解决方案:

强行创建并编辑 /etc/X11/Xwrapper.conf文件,增加以下内容:

allowed_users=anybody

直接编辑/etc/xrdp/startwm.sh ,在wm_start方法中,添加以下内容:

dbus-launch --sh-syntax startxfce4
exit 0 

这个设置不检查当前环境、设置和用户配置,直接强行启动xfce4。

问题排查

出现问题时,首先应该检查相关错误信息和服务状态(状态信息中也有错误日志):

sudo cat /var/log/xrdp
sudo cat /var/log/xrdp-sesman

sudo systemctl status xrdp-sesman
sudo systemctl status xrdp

一般情况下都可以获得一些相关有用的信息和思路。然后就可以进一步结合故障表现,进行排查了。常见的故障和排查思路操作可能包括:

  • 无法连接

检查网络是否通畅,IP地址是否正确,主机是否可以直接连接,防火墙是否打开
 

  • 无法登录

检查在服务端的用户和密码,可以先确认用户在本机或者远程终端中能够正常登录。

  • 连接后黑屏灰屏

应该是窗口管理程序没有正常启动,需要检查系统的类型后后续处理,窗口程序类型,启动命令是否被调用和正常运行等等。

  • 登录后提示没有权限

这个问题笔者曾经遇到过,重新安装和配置后就解决了,猜想和 dbus-lunch 没有正确执行有关。

  • vigervnc安装,作为一个依赖项目,可能需要在xrdp安装前完成

安装和配置开发工具

作为开发测试使用的桌面系统,我们需要安装一系列相关的软件和工具,包括开发工具(VSCode)、版本管理工具(Git)和应用执行环境(Nodejs)和运行管理程序(PM2)。


sudo -i

// vscode
pacman -S code

// git 
pacman -S git

// node
pacman -S nodejs npm 

// pm2 
npm install pm2 -g

而标准的Web服务,笔者使用caddy,详细的安装、配置和使用详见相关另外的文章。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论