title: 树莓派的 GUI 应用

src: posts/2023-06-22-raspberry pi GUI.md

change log: None

created at: Jan. 24, 2026, 12:39 p.m., last updated: Jan. 24, 2026, 12:39 p.m.

树莓派的 GUI 应用

本文介绍在 Raspberry Pi OS 系统下如何把树莓派的显示器当作单一的 GUI 的程序使用,类似与编写单片机的图形界面,而不是一个完整的 Desktop 桌面。

img

跳过 Desktop 直接启动 GUI APP

GUI 程序一定要在桌面上运行吗?当然不是的。如果想让自己的 GUI APP 开机启动,并不一定要使用 LDXP 的 startup 功能。树莓派也可以直接启动 GUI 应用作为开机应用。

如果你搜索的是如何启动 GUI 程序,教程里可能会让你安装 raspberrypi-ui-mods , 但是,如果我们我们的应用场景始终只用 pi 一个账户启动一个 GUI 程序,其实没必要安装那么多程序哦!

以 terminal 这个 APP 作为例子,两种启动方法启动它进程树是不一样的:

1 如果在 tty 里,进程树里没有任何显示相关的进程,是非常简单的两个进程:

login - bash

2 而在桌面环境里,启动的代码会比较复杂,大概这样:

lightdm - lxsession - lxpanel - lxterminal

同时,你会发现,要启动图形管理器,会一同启动桌面环境,控制台,登陆器,面板等一些登录相关的图形应用。

本文要实现的单一 GUI 起动的模式就是要跳过消耗资源的桌面环境,他的进程树大概是这样的:

systemd - (bash) - xinit - x-terminal-emulator

TODO: bash 应该可以去掉,直接 systemd 执行 xinit

TODO: wayland

首先需要一块显示器

完整的驱动是前提,只要驱动 ok,对于 LCD 或者 HDMI 接口其实都一样玩法。

我买的是一块插在 GPIO 上的 3.5 LCD 。组装在树莓派上之后根据供应商的要求安装好驱动即可。

安装完之后和最左边的图一样,现在已经可以登录 tty 了。

注意:有时候供应商的驱动安装程序会缺少一些东西,需要自己 Debug 一下,例如我这个显示器安装完 x11 之后会在 /var/log/Xorg.0.logand 文件里打印: Failed to load module "fbturbo" (module does not exist, 0)。

sudo apt install xserver-xorg-video-fbturbo

还有触摸屏也会遇到对不上的问题,需要改改标定配置:

echo 'Option  "TransformationMatrix" "0 -1 1 1 0 0 0 0 1"' >> /usr/share/X11/xorg.conf.d/99-calibration.conf

然后我们从 Raspberry Pi OS Lite 版本开始安装图形环境。

方案一:安装 X11 + xinit 但不安装显示管理和桌面环境

sudo apt-get install xserver-xorg
sudo apt-get install xinit

安装完后可能要重新安装一下驱动

我其中一块 LCD 需要在 99-calibration.conf 设置触摸屏的旋转 Option "TransformationMatrix" "1 0 0 0 -1 1 0 0 1"

我的另一款 LCD 需要在另一个地方设置旋转

# file 40-libinput.conf
Section "InputClass"
        Identifier "libinput touchscreen catchall"
        MatchIsTouchscreen "on"
    	Option "CalibrationMatrix" "-1 0 1 0 -1 1 0 0 1"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
EndSection
```cfg


***[怎么配上面的仿射矩阵](https://www.alanzucconi.com/2016/02/10/tranfsormation-matrix/)***

其中 xserver-xorg 是显示的服务端,这个安装完后就算没有安装桌面,你也可以通过其他机器,使用 ssh -X xxx 来启动 gui 应用了。

第二行的 xinit 包含一个最简单的启动显示器的脚本 startx

安装之后马上在 ssh 端口往显示器发送 startx 指令:

```bash
startx > /dev/tty1 # 在 tty1 已经登录的前提下

可以通过 raspberrpi-config 1 System Options -> Boot / Auto login -> Console Autologin 来配置自动登录

或者也可以把键盘插到树莓派上运行

startx & # 后台运行符号 & 千万别漏了

不出意外的话,就可以在 terminal 上看到 x-terminal-emulator 啦!

有时候找不到 DISLPAY 可以试一下清楚 home 目录的 /home/pi/.Xauthority 文件

设置开机启动 startx

因为这是个独立应用,我们可以写个简单的 systemd 文件来守护他

mkdir -p ~/.config/systemd/user
vim ~/.config/systemd/user/startx.service
[Unit]
Description=My GUI-APP Deamon

[Service]
ExecStart=/bin/sh -c '/usr/bin/startx > /dev/tty1'
Restart=always
RestartSec=3

[Install]
WantedBy=default.target
systemctl --user enable startx

配置完之后每当 pi 用户在 tty1 上登陆(包括自动登录),三秒内就会启动 startx 的默认 GUI APP。

方案二:安装 X11 + lightdm 但不安装桌面环境

比方案一多装一个显示管理(要多装 122MB 的软件)

sudo apt-get install xserver-xorg
sudo apt-get install lightdm

第二行的 lightdm 是显示器管理器,如果想在显示器上显示,还得有它来管理。安装完之后可以发现 systemd 多了一个 lightdm.service。他负责管理登录界面,默认 lightdm 会把 lightdm-gtk-greeter 也装上。

这个方法如果如果 xinit 的内容退出,会运行欢迎界面 lightdm-gtk-greeter。单用户的话,其实也用不到。

设置开机启动 lightdm

sudo raspi-config

选择 1 System Option -> Boot / Auto Login -> Desktop Autologin 。

测试一下其他 gui app

重启之后系统默认会进入 x-terminal-emulator 程序。外观上可以看到这家伙变白了!

我们依然通过 ssh 操作。试一下其他图形应用。

安装 x11-apps

sudo apt-get install x11-apps

查看哪些端口可以用

xauth list
rp2/unix:11  MIT-MAGIC-COOKIE-1  c14663e9791e9f995340df13831512e2
rp2/unix:12  MIT-MAGIC-COOKIE-1  0039c56086bc242f4414c8241be40f09
rp2/unix:10  MIT-MAGIC-COOKIE-1  529a63a3832cf9f29846c2759f2f729e
rp2/unix:0  MIT-MAGIC-COOKIE-1  85dba36ae99a052add1639c84500cc27
rp2:0  MIT-MAGIC-COOKIE-1  85dba36ae99a052add1639c84500cc27 <--我们挑他

设置 DISPLAY 环境变量,试一下 xclock,会出现这个小表盘

export DISPLAY=:0

想要开机启动自己的 GUI APP 替换掉 terminal-emulator ? 直接写到 .xinitrc 文件里! 例如

echo xclock > ~/.xinitrc

img

大功告成!