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

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 版本开始安装图形环境。
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 文件
因为这是个独立应用,我们可以写个简单的 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。
比方案一多装一个显示管理(要多装 122MB 的软件)
sudo apt-get install xserver-xorg
sudo apt-get install lightdm
第二行的 lightdm 是显示器管理器,如果想在显示器上显示,还得有它来管理。安装完之后可以发现 systemd 多了一个 lightdm.service。他负责管理登录界面,默认 lightdm 会把 lightdm-gtk-greeter 也装上。
这个方法如果如果 xinit 的内容退出,会运行欢迎界面 lightdm-gtk-greeter。单用户的话,其实也用不到。
sudo raspi-config
选择 1 System Option -> Boot / Auto Login -> Desktop Autologin 。
重启之后系统默认会进入 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

大功告成!