Skip to main content

AlpineLinux 安装 Xfce 桌面

· 6 min read

假设已经有一个基础可用的 AlpineLinux, 如果没有可前往 wenerme/alpine-image 下载或自行制作

setup xorg

安装 X server 和基础硬件驱动

# xfce + xorg
setup-xorg-base xfce4 xfce4-terminal dbus-x11 sudo pm-utils

service dbus start
rc-update add dbus

# xorg 输入设备
# apk add xf86-input-mouse xf86-input-keyboard kbd
# 默认包含 libinput
# 其他 synaptics vmmouse wacom mtrack
apk add xf86-input-libinput xf86-input-evdev kbd

# Intel 芯片集成显卡
apk add xf86-video-intel
# AMD 显卡
apk add xf86-video-amdgpu
# QEMU
# apk add xf86-video-qxl
# 如果以上都不支持则考虑使用 framebuffer
# https://pkgs.alpinelinux.org/packages?name=xf86-video-*
# apk add xf86-video-fbdev

此时已经可以进入 xfce 桌面, 没有登陆界面, 进入界面后可右上角退出登陆或者 Ctrl+Alt+F1 来切换回命令行会话。

# 通过 xorg 提供的 startx 启动
startx
# 或者指定启动 xfce4
startxfce4

setup lightdm

安装 lightdm 后可以可以通过账号密码登陆, 也可以远程 VNC 进入 xfce 会话。

apk add lightdm-gtk-greeter

# 添加非 root 用户 admin 密码 admin - 不少应用需要非 root 用户
adduser -D admin
echo 'admin:admin' | chpasswd
echo 'admin ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers

# 开机进入登陆界面
rc-update add lightdm
# 立即启动 lightdm 进行登陆
service lightdm start

setup xfce

安装常用的包

# 默认无法显示中文字符
apk add font-noto-cjk

# 允许非 root 通过 fuse 访问设备
apk add gvfs-fuse gvfs-smb
service fuse start
rc-update add fuse

# 自动挂载 外部设备
apk add thunar-volman udisks2
# 部分设备需要额外的包
# gvfs-mtp - MTP - 媒体播放器和移动设备
# gvfs-gphoto2 - PTP - 相机和移动设备
# gvfs-afc - 苹果移动设备

# 文件管理器支持压缩和解压
apk add thunar-archive-plugin
apk add file-roller # thunar-archive-plugin 支持的管理器

安装了相关插件后最好退出会话重新登陆确保生效。

应用

# 屏保, 任务管理器
apk add xfce4-screensaver xfce4-taskmanager

# 谷歌浏览器 - 也可以通过 flatpak 安装
apk add chromium
# 火狐浏览器
# apk add firefox-esr

flatpak

Linux 因为发布版太大了,应用分发比较混乱,且不少应用并不直接支持 musl,使用 flatpak 打包的应用可避免这些问题。

apk add flatpak xdg-user-dirs
# https://flathub.org/setup/Alpine
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# 安装
flatpak install flathub com.visualstudio.code
# 启动
flatpak run com.visualstudio.code

flatpak install flathub org.chromium.Chromium

常用应用

idname用途
com.visualstudio.codeVSC编辑器
om.vscodium.codiumCodium编辑器
org.chromium.ChromiumChromium浏览器
org.mozilla.firefoxFirefox浏览器
org.telegram.desktopTelegram即时聊天
com.valvesoftware.SteamSteam游戏
org.mozilla.ThunderbirdThunderbird邮件
org.filezillaproject.FilezillaFilezilla文件

AppImage

不通过 flatpak 需要安装,AppImage 是封装好的一体化应用,类似容器,类似 macOS 应用。 但目前由于 glibc 兼容问题 Alpine 无法运行 AppImage 参见 AppImage/AppImageKit#1015

已知提供 AppImage 的应用

  • Jetbrain Toolbox
  • Lens - Kubernetes IDE

其他服务

  • xrdp - RDP 服务端 - 支持 Windows 直接远程登陆
  • gvncviewer - VNC 客户端

FAQ

xfce 支持高分辨率

# 两倍缩放
# Settings Manager > Appearance > Settings > Window Scaling
xfconf-query -c xsettings -p /Gdk/WindowScalingFactor -s 2
# 调整主题为 默认 xhdpi
# Settings Manager > Window Manager > Style
xfconf-query -c xfwm4 -p /general/theme -s Default-xhdpi

DISPLAY 信息

apk add xrandr
DISPLAY=:0 xrandr

查看当前显卡和声卡信息

apk add inxi
inxi -AG

kernel: i915 0000:00:02.0: [drm] ERROR CPU pipe A FIFO underrun

如果该错误导致闪烁可添加启动参数避免 i915.enable_psr=0

Intel graphics#Screen flickering

可能由于 Intel 集成显卡的节能功能导致

VNC 远程桌面

apk add x11vnc

# 启动服务端访问已打开会话
x11vnc -display :0 -auth /var/run/lightdm/root/\:0
# 然后访问 vnc://<IP>:5900 即可

# 不退出
x11vnc -display :0 -auth /var/run/lightdm/root/\:0 --loop

# 访问时创建新的会话
# 确保 init 能启动
echo "exec startxfce4" >> ~/.xinitrc
apk add xvfb
x11vnc -ncache_cr -display :1 -auth /var/run/lightdm/root/\:1 --create

# 不警告没有设置密码
echo nopw >> ~/.x11vncrc

# 可设置为开机启动
# x11vnc -create -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -rfbauth /etc/x11vnc.pass -rfbport 5900

# 登陆之前开启 VNC
# x11vnc -auth guess -display :0

如果服务常开,建议设置密码

KMS: DRM_IOCTL_MODE_CREATE_DUMB failed: Permission denied

  • DRM - Direct Rendering Manager

xrandr auto

xrandr --auto
xrandr: Output DP1 is not disconnected but has no modes
xrandr: Output HDMI2 is not disconnected but has no modes
export DISPLAY=:0
xrandr --query

kiskos

~/.initrc
xset -dpms     # Disable DPMS (Energy Star) features
xset s off # Disable screen saver
xset s noblank # Don't blank the video device
exec chromium-browser --kiosk --no-first-run --no-sandbox 'https://wener.me'

参考