Compare commits

..

8 Commits

Author SHA1 Message Date
43e1df1a93 Update Aimee OS
All checks were successful
dustin/photoframe2/pipeline/pr-main This commit looks good
2025-01-02 13:15:42 -06:00
c0158d134d prepare: Never sync Portage repos
To minimize unexpected changes between builds, I'm going to schedule a
separate task to sync the Portage repositories.  This way, we know that
two runs in a row from the same source will have the same packages,
unless we have specifically updated Portage.
2025-01-02 13:15:29 -06:00
bab1684198 overlay: Add authorized SSH keys for root
Adding my personal keys so I can manage the system remotely.
2025-01-02 13:15:29 -06:00
ddf7626283 kernel: Enable user namespaces for Firefox
Firefox complains about "security features" not working if this is not
enabled.
2025-01-02 13:15:29 -06:00
61f254b594 exclude: Omit systemd-ssh-generator
This thing is pointless.

Unfortunately, we cannot use Portage's `INSTALL_MASK` feature as it
doesn't work for symbolic links. Since _systemd_ installs symlinks in
`/etc/ssh` that point to files we would mask, those symlinks would point
to nothing, which would cause `sshd` to fail to start as it is unable to
open those files.  Thus, we have to omit these files by excluding them
from the squashfs image.
2025-01-02 13:15:29 -06:00
dd89e700b0 kernel: Enable BPF firewall for systemd
_systemd_ complains if this is not enabled, as it prevents certain
sandbox features from working.
2025-01-02 13:15:29 -06:00
6212c04f6b kernel/firmware: Support RPi GPU, touchscreen
Getting the Raspberry Pi 4 GPU and 7-inch Touch Display 2 working was
quite challenging.  Several kernel drivers are needed, beyond the
obvious VC4 and V3D, like voltage regulators and backlight controls.
Even with all the drivers enabled, I still had trouble getting
`/dev/dri/card1` (the display device, as opposed to `/dev/dri/card0`,
the 3D rendering device) to appear until I explicitly enabled the
`vc4-kms-dsi-ili9881-7inch` device tree overlay.  I am not entirely sure
why this is necessary, since `display_auto_detect` supposedly should
have added this overlay automatically.  I am also not sure how it would
work if I wanted to use an HDMI monitor instead of the DSI panel, but
fortunately, for this project, that's not necessary.
2025-01-02 13:15:29 -06:00
b3fa910a6a Begin implementing kiosk browser
This commit introduces the _kiosk.service_ unit, which launches `sway`
to start a Wayland session, which in turn launches Firefox.  The
`policies.json` file configures Firefox in a sort of kiosk mode,
disabling most features and blocking all but the desginated sites.
Unfortunately, running `firefox --kiosk` doesn't actually work: Firefox
apparently runs, but doesn't draw anything on the screen.

Note that we have to launch Firefox by its "real" path, since
`/usr/bin/firefox` is a Bash script, and Bash is not installed.
Fortunately, the wrapper script doesn't do anything we really care
about, so bypassing it is fine.
2025-01-02 12:59:57 -06:00
6 changed files with 5 additions and 68 deletions

View File

@@ -1,6 +1,3 @@
gui-apps/swayidle
gui-wm/sway gui-wm/sway
media-gfx/feh
media-video/pipewire
net-misc/curl
net-wireless/wpa_supplicant net-wireless/wpa_supplicant
media-video/pipewire

View File

@@ -23,7 +23,7 @@
}, },
"DontCheckDefaultBrowser": true, "DontCheckDefaultBrowser": true,
"Homepage": { "Homepage": {
"URL": "https://homeassistant.pyrocufflink.blue/", "URL": "https://homeassistant.pyrocufflink.blue/dashboard-rosalina",
"Locked": true, "Locked": true,
"StartPage": "homepage-locked" "StartPage": "homepage-locked"
}, },
@@ -37,9 +37,6 @@
"browser.sessionstore.resume_from_crash": { "browser.sessionstore.resume_from_crash": {
"Value": false "Value": false
}, },
"browser.startup.couldRestoreSession.count": {
"Value": -1
},
"datareporting.policy.dataSubmissionPolicyBypassNotification": { "datareporting.policy.dataSubmissionPolicyBypassNotification": {
"Value": true "Value": true
}, },

View File

@@ -6,14 +6,9 @@ input * {
map_to_output DSI-1 map_to_output DSI-1
} }
exec /usr/lib64/firefox/firefox exec gsettings set org.gnome.desktop.interface gtk-theme Adwaita-dark
exec /usr/bin/photoframe stream exec gsettings set org.gnome.desktop.interface color-scheme prefer-dark
exec swayidle -w \ exec /usr/lib64/firefox/firefox
timeout 120 'photoframe show' resume 'photoframe hide'
for_window [title="Mozilla Firefox"] fullscreen for_window [title="Mozilla Firefox"] fullscreen
for_window [class="photoframe"] fullscreen
assign [title="Mozilla Firefox"] 1
assign [class="photoframe"] 2

View File

@@ -5,7 +5,6 @@ Type=ether wlan
DHCP=yes DHCP=yes
[DHCPv4] [DHCPv4]
ClientIdentifier=mac
UseDomains=yes UseDomains=yes
[DHCPv6] [DHCPv6]

View File

@@ -1,46 +0,0 @@
#!/bin/sh
photoframe_hide() {
swaymsg 'workspace 1'
}
photoframe_show() {
# Run on a separate workspace so Firefox can stay fullscreen, too
swaymsg 'workspace 2'
if [ -f /tmp/photoframe.pid ]; then
# feh is already running
return 0
fi
if [ ! -f /tmp/photoframe-current ]; then
cp /usr/share/feh/images/feh.png /tmp/photoframe-current
fi
feh -FZ --draw-exif --class photoframe /tmp/photoframe-current &
# Wait for the feh window to actually appear ...
swaymsg -t subscribe '["window"]'
# Sometimes, Sway's `for_window ... fullscreen` doesn't work?
swaymsg fullscreen
echo $! > /tmp/photoframe.pid
}
photoframe_stream() {
while :; do
curl -NsS https://photos.pyrocufflink.blue/stream |
while read url; do
curl -fsL -o /tmp/photoframe-next "${url}" || continue
mv /tmp/photoframe-next /tmp/photoframe-current
done
sleep 30
done
}
case $1 in
show)
photoframe_show
;;
hide)
photoframe_hide
;;
stream)
photoframe_stream
;;
esac

View File

@@ -1,5 +0,0 @@
gui-apps/swayidle -systemd
gui-libs/wlroots X
gui-wm/sway X
media-gfx/feh exif inotify
net-misc/curl -alt-svc -ftp -hsts -http3 -imap -pop3 -progress-meter -psl -quic -smtp -tftp -websockets -adns -http2 CURL_QUIC: -*