![使用 systemd 启动时使用 fbi 显示图像](https://linux22.com/image/227302/%E4%BD%BF%E7%94%A8%20systemd%20%E5%90%AF%E5%8A%A8%E6%97%B6%E4%BD%BF%E7%94%A8%20fbi%20%E6%98%BE%E7%A4%BA%E5%9B%BE%E5%83%8F.png)
我可以使用以下命令成功显示图像:
sudo fbi -T 1 /home/pi/photo-screen/photos/*.jpg -t 4
我现在想在 Raspberry PI 启动后立即开始播放这些图片的幻灯片。
所以我添加了一个 systemd 文件,如下所示:
[Unit]
Wants=graphical.target
After=graphical.target
[Service]
Type=simple
User=pi
Group=pi
WorkingDirectory=/home/pi/photo-screen
ExecStart=sudo bash -c "fbi -T 1 -d /dev/fb0 photos/*"
Restart=always
RestartSec=20
[Install]
WantedBy=multi-user.target
● photo-screen.service
Loaded: loaded (/etc/systemd/system/photo-screen.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-12-11 15:12:07 CET; 61ms ago
Main PID: 1080 (sudo)
Tasks: 2 (limit: 472)
CPU: 23ms
CGroup: /system.slice/photo-screen.service
├─1080 sudo bash -c fbi -T 1 -d /dev/fb0 photos/*
└─1082 fbi -T 1 -d /dev/fb0 photos/0058966c-7ee5-4fc0-80ec-55885809567b.jpg photos/04669eb7-bf5e-4cbf-ab8f-fc7b3566186d.jpg photos/0cc1ad40-1b05-4f1c-beae-0c285d6b62>
Dec 11 15:12:07 foto systemd[1]: Started photo-screen.service.
Dec 11 15:12:07 foto sudo[1080]: pi : PWD=/home/pi/photo-screen ; USER=root ; COMMAND=/usr/bin/bash -c fbi -T 1 -d /dev/fb0 photos/*
Dec 11 15:12:07 foto sudo[1080]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
请注意,我是通过 SSH 登录的,因此分配正确的 tty 确实可以很好地使用该-T 1
参数。
我试过:
- 包括
chvt 1;
在我的脚本中 - 运行它作为
root
- 将选项添加
-d /dev/fb0
到我的脚本中 - 使用
fim
但我有完全相同的问题 - 使用非相对路径
我连接了一个屏幕,登录提示有时会变黑,但我看不到任何图像。
OOPS Terminated
我确实在登录提示上方的屏幕上的某个时刻出现过。
另外,当我用随机的东西填充屏幕时,一段时间后它会被覆盖约 80% 屏幕的黑条覆盖:
cat /dev/random > /dev/fb0
我尝试用以下内容替换我的联邦调查局脚本,cat /dev/random > /dev/fb0
但这也没有填满屏幕。
我认为提供提升的 bash 终端可能会解决问题:
sudo bash -c "chvt 1; fbi -T 1 -d /dev/fb0 images/*"
这再次通过我的 ssh 终端工作,但不使用 systemd。
答案1
我一直在这个兔子洞里但没有成功。我找不到从 systemd 守护进程访问 fbi 的 tty1 的方法。
我用 crontab 代替。首先,我通过选择“首选项”>“Raspberry Pi 配置”禁用了通过 GUI 的自动登录。在“系统”选项卡中,我将“自动登录”设置为“禁用”。
然后我添加了一个 cron 条目(sudo crontab -e
因此它以 root 身份运行):
@reboot fbi -a --noverbose -T 1 -d /dev/fb0 -l /home/ed/Documents/PictureFrame/images.txt --random --blend 120 -t 30
因此,当 pi 出现时,该命令就会运行。但这并没有奏效。我可以看到幻灯片开始播放一秒钟,但随后我就把它丢到了登录屏幕上。幻灯片开始得太早了。没关系,无论如何,我真正想要的是每次从 SmugMug 下载一批新的图片。所以我创建了一个 shell 脚本来下载图片然后调用 fbi。因此,在我的 cron 作业中,我等待网络连接,然后调用执行此操作的 shell 脚本:
@reboot /bin/bash -c 'until nc -z 8.8.8.8 53; do sleep 1; done; /home/ed/Documents/PictureFrame/FBISlideShow'
为了得到 nc 我跑了sudo apt install netcat-traditional
。可以只使用 sleep 10 之类的。
现在,我的幻灯片在 Pi 启动后自动启动,尽管有短暂的延迟。
这是在带有 Debian Bookworm 的 Raspberry Pi 4 上。