Compare commits

..

8 Commits
1.0.14 ... main

Author SHA1 Message Date
8ac881ffcf Add apt cleanup to reduce image size 2025-07-22 17:27:24 +01:00
b7e48f776e Display git tag on web interface 2025-07-22 17:25:47 +01:00
8e8f51f2d8 no need for x86 2025-07-21 15:11:39 +01:00
751a3fed26 rename to N-AnotterKiosk 2025-07-21 15:04:54 +01:00
8b25aa87db hyperion 2025-07-21 14:12:03 +01:00
e89639703d run hyperion as pi not root 2025-07-21 12:02:06 +01:00
b04d59338d allow rw filesystem 2025-07-19 13:38:38 +01:00
4ba1d6e916 Revert to 1.0.8 and add Hyperion 2025-07-19 09:39:17 +01:00
22 changed files with 56 additions and 73 deletions

View File

@ -24,12 +24,9 @@ jobs:
sudo apt update -qq sudo apt update -qq
sudo apt install -yqq libguestfs-tools qemu-utils qemu-system-arm qemu-efi-aarch64 qemu-block-extra qemu-user-static binfmt-support rsync sudo wget xz-utils pigz mount dosfstools libarchive-tools sudo apt install -yqq libguestfs-tools qemu-utils qemu-system-arm qemu-efi-aarch64 qemu-block-extra qemu-user-static binfmt-support rsync sudo wget xz-utils pigz mount dosfstools libarchive-tools
- name: Make build script executable
run: chmod +x build.sh
- name: Build firmware - name: Build firmware
run: | run: |
sudo ./build.sh sudo ./build_raspberry_pi.sh
- name: Release build artifacts - name: Release build artifacts
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v1

View File

@ -3,7 +3,6 @@ N-AnotterKiosk (Not-AnotterKiosk)
### I have hacked this about alot from the main branch, mainly Raspberry Pi changes ### I have hacked this about alot from the main branch, mainly Raspberry Pi changes
- Removed x86 support
- Added scheduled screen on/off - Added scheduled screen on/off
- Added scheduled chrome page refresh - Added scheduled chrome page refresh
- Rpi3 Overclock settings - Rpi3 Overclock settings
@ -18,7 +17,7 @@ This project aims to solve a lot of those (at least for the author), it might al
#### Key features #### Key features
- [Images built via CI](https://github.com/Manawyrm/AnotterKiosk/blob/main/.github/workflows/main.yml) - [Images built via CI](https://github.com/Manawyrm/N-AnotterKiosk/blob/main/.github/workflows/main.yml)
- WiFi connection support - WiFi connection support
- Raspberry Pi (Arm64) compatibility - Raspberry Pi (Arm64) compatibility
- [USB flash drive, USB SSD, etc. compatible](#how-to-use) - [USB flash drive, USB SSD, etc. compatible](#how-to-use)
@ -32,6 +31,7 @@ This project aims to solve a lot of those (at least for the author), it might al
- VNC support - VNC support
- SSH tunneling support (for remote-access without port-forwarding, etc.) - SSH tunneling support (for remote-access without port-forwarding, etc.)
- Basic API for Rpi Actions - Basic API for Rpi Actions
- Hyperion-NG support for ambilight
#### Planned features: #### Planned features:
@ -47,13 +47,13 @@ This project aims to solve a lot of those (at least for the author), it might al
### How-To Use ### How-To Use
Like any other Raspberry Pi image: download the current .img file from the [Releases](https://github.com/Manawyrm/AnotterKiosk/releases) page and flash it to a storage device of your choice. Like any other Raspberry Pi image: download the current .img file from the [Releases](https://github.com/Manawyrm/N-AnotterKiosk/releases) page and flash it to a storage device of your choice.
SD cards, USB flash drives, USB SSDs, SATA SSDs, NVMe SSDs are all good options. SD cards, USB flash drives, USB SSDs, SATA SSDs, NVMe SSDs are all good options.
You can use a tool like the [Raspberry Pi Imager](https://www.raspberrypi.com/software/), [BalenaEtcher](https://etcher.balena.io/), [Win32DiskImager](https://sourceforge.net/projects/win32diskimager/) or plain "dd" on \*nix-like systems. You can use a tool like the [Raspberry Pi Imager](https://www.raspberrypi.com/software/), [BalenaEtcher](https://etcher.balena.io/), [Win32DiskImager](https://sourceforge.net/projects/win32diskimager/) or plain "dd" on \*nix-like systems.
When using the latter two, make sure to extract the .gz compression first (using a tool like 7zip). When using the latter two, make sure to extract the .gz compression first (using a tool like 7zip).
After flashing, re-plug the storage device and open the FAT32 partition. After flashing, re-plug the storage device and open the FAT32 partition.
Open the [`kioskbrowser.ini`](https://github.com/Manawyrm/AnotterKiosk/blob/main/kiosk_skeleton/boot/kioskbrowser.ini) file in a text editor and change everything to your needs. Open the [`kioskbrowser.ini`](https://github.com/Manawyrm/N-AnotterKiosk/blob/main/kiosk_skeleton/boot/kioskbrowser.ini) file in a text editor and change everything to your needs.
More complex WiFi setups (like WPA2-Enterprise) can be configured by creating a wpa_supplicant.conf. More complex WiFi setups (like WPA2-Enterprise) can be configured by creating a wpa_supplicant.conf.
Adding your own SSH keys can be done by creating a authorized_keys file. Adding your own SSH keys can be done by creating a authorized_keys file.
If you want to use the autossh tunneling features, copy an SSH private key as either "id_rsa" or "id_ed25519". If you want to use the autossh tunneling features, copy an SSH private key as either "id_rsa" or "id_ed25519".
@ -122,6 +122,11 @@ Starts the screen-refresh.service to refresh the screen.
`GET /script.php?action=reboot&key=YOUR_API_KEY` `GET /script.php?action=reboot&key=YOUR_API_KEY`
Reboots the Raspberry Pi. Reboots the Raspberry Pi.
### Hyperion-NG
The kiosk now supports Hyperion-NG for ambilight control.
Manage Hyperion via its web interface, which is available on port 8090.
### Inspiration / Other Kiosk-OSes: ### Inspiration / Other Kiosk-OSes:
- https://github.com/jareware/chilipie-kiosk/ - https://github.com/jareware/chilipie-kiosk/

14
build.sh → build_raspberry_pi.sh Normal file → Executable file
View File

@ -42,8 +42,9 @@ sudo losetup -P /dev/loop0 raspikiosk.img
sudo mount /dev/loop0p2 "${BUILD_DIR}" sudo mount /dev/loop0p2 "${BUILD_DIR}"
sudo mount /dev/loop0p1 "${BUILD_DIR}/boot" sudo mount /dev/loop0p1 "${BUILD_DIR}/boot"
# Copy the skeleton files # Copy the (raspberry pi-specific) skeleton files
sudo rsync -a "${SCRIPT_DIR}/kiosk_skeleton/." "${BUILD_DIR}" sudo rsync -a "${SCRIPT_DIR}/raspberry_pi_skeleton/." "${BUILD_DIR}"
sudo rsync -a "${SCRIPT_DIR}/kiosk_skeleton/." "${BUILD_DIR}/kiosk_skeleton"
# Make fstab read-only # Make fstab read-only
sed -i 's/vfat defaults/vfat ro,defaults/g' "${BUILD_DIR}/etc/fstab" sed -i 's/vfat defaults/vfat ro,defaults/g' "${BUILD_DIR}/etc/fstab"
@ -51,7 +52,7 @@ sed -i 's/ext4 defaults/ext4 ro,defaults/g' "${BUILD_DIR}/etc/fstab"
# Include git repo version info # Include git repo version info
echo -n "N-AnotterKiosk Raspberry Pi version: " > "${BUILD_DIR}/version-info" echo -n "N-AnotterKiosk Raspberry Pi version: " > "${BUILD_DIR}/version-info"
git describe --abbrev=4 --always --tags >> "${BUILD_DIR}/version-info" git describe --abbrev=4 --dirty --always --tags >> "${BUILD_DIR}/version-info"
# Mount system partitions (from the build host) # Mount system partitions (from the build host)
sudo mount proc -t proc -o nosuid,noexec,nodev "${BUILD_DIR}/proc/" sudo mount proc -t proc -o nosuid,noexec,nodev "${BUILD_DIR}/proc/"
@ -62,10 +63,9 @@ sudo mount devpts -t devtmpfs -o mode=0755,nosuid "${BUILD_DIR}/dev/"
sudo chroot "${BUILD_DIR}" /raspberry_pi_bullseye.sh sudo chroot "${BUILD_DIR}" /raspberry_pi_bullseye.sh
# and then actually install everything. # and then actually install everything.
sudo chroot "${BUILD_DIR}" /build.sh sudo chroot "${BUILD_DIR}" /kiosk_skeleton/build.sh
# remove the build scripts sudo rm -r "${BUILD_DIR}/kiosk_skeleton"
sudo rm "${BUILD_DIR}/build.sh"
sudo rm "${BUILD_DIR}/raspberry_pi_bullseye.sh" sudo rm "${BUILD_DIR}/raspberry_pi_bullseye.sh"
cp "${BUILD_DIR}/version-info" version-info cp "${BUILD_DIR}/version-info" version-info
@ -83,6 +83,6 @@ sudo umount "${BUILD_DIR}"
sudo losetup -D /dev/loop0 sudo losetup -D /dev/loop0
tag=$(git describe --abbrev=4 --always --tags) tag=$(git describe --abbrev=4 --dirty --always --tags)
mv raspikiosk.img n-anotterkiosk-${tag}-arm64-raspberrypi.img mv raspikiosk.img n-anotterkiosk-${tag}-arm64-raspberrypi.img
pigz -4 n-anotterkiosk-${tag}-arm64-raspberrypi.img pigz -4 n-anotterkiosk-${tag}-arm64-raspberrypi.img

View File

@ -15,7 +15,7 @@ reboot_time = 04:00
; set screen rotation to be used (normal, left, right, inverted) ; set screen rotation to be used (normal, left, right, inverted)
;rotate_screen = "normal" ;rotate_screen = "normal"
; configure screen to power on/off as specific time of day (time format in 24 hours) ; configure screen to power on/off as specific time of day (time format in 24 hours)
screen_off_time=22:30 ;screen_off_time=23:00
;screen_on_time=07:00 ;screen_on_time=07:00
; configure chrome to refresh the page every x minutes ; configure chrome to refresh the page every x minutes
;refresh_screen_every_x_min=15 ;refresh_screen_every_x_min=15

View File

@ -81,7 +81,20 @@ systemctl enable ssh
systemctl enable kiosk-sechedule-screen.service systemctl enable kiosk-sechedule-screen.service
systemctl enable schedule-reboot.service systemctl enable schedule-reboot.service
systemctl enable setup-refresh-timer.service systemctl enable setup-refresh-timer.service
systemctl enable hyperiond
# Install Hyperion
curl -sSL https://apt.hyperion-project.org/hyperion.pub.key | gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg
echo "deb [signed-by=/usr/share/keyrings/hyperion.pub.gpg] https://apt.hyperion-project.org/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hyperion.list
apt update
apt install -y hyperion
# Run Hyperion as the 'pi' user
mkdir -p /etc/systemd/system/hyperiond.service.d
echo -e "[Service]\nUser=pi\nGroup=pi" > /etc/systemd/system/hyperiond.service.d/override.conf
chown -R pi:pi /var/lib/hyperion || true
chown -R pi:pi /etc/hyperion
usermod -a -G video pi
# generate a version info/build info file # generate a version info/build info file
echo -n "Chromium version: " >> /version-info echo -n "Chromium version: " >> /version-info
@ -90,3 +103,7 @@ dpkg --list | grep "ii chromium " >> /version-info
echo -n "Linux kernel version: " >> /version-info echo -n "Linux kernel version: " >> /version-info
ls /lib/modules/ | sort -r | head -n 1 >> /version-info ls /lib/modules/ | sort -r | head -n 1 >> /version-info
echo >> /version-info echo >> /version-info
# Clean up apt cache and remove unused packages
apt-get clean
apt-get autoremove -y

View File

@ -1,20 +0,0 @@
{
"device" :
{
"name" : "MyPi",
"type" : "ws281x",
"leds" : 50,
"colorOrder" : "grb",
"gpio" : 18,
"freq" : 800000,
"dmanum" : 5
},
"grabber-framebuffer" :
{
"width" : 64,
"height" : 64,
"frequency_Hz" : 10.0,
"priority" : 890
}
}

View File

@ -1,2 +1,2 @@
AnotterKiosk \n \l N-AnotterKiosk \n \l

View File

@ -1,4 +1,3 @@
Welcome to AnotterKiosk! Welcome to N-AnotterKiosk!
Run "mount -o remount,rw /" to make the root filesystem writeable.
FAT32 / config partition is located in /boot. FAT32 / config partition is located in /boot.

View File

@ -1,16 +0,0 @@
[Unit]
Description=Hyperion ambient light systemd service
After=network.target
[Service]
ExecStart=/usr/bin/hyperiond
WorkingDirectory=/usr/share/hyperion/bin
User=root
Group=root
TimeoutStopSec=5
KillMode=mixed
Restart=on-failure
RestartSec=2
[Install]
WantedBy=multi-user.target

View File

@ -1,4 +1,4 @@
# /etc/systemd/system/kiosk-schedule-screen.service # /etc/systemd/system/kiosk-sechedule-screen.service
[Unit] [Unit]
Description=Schedule Screen On/Off Timers Description=Schedule Screen On/Off Timers
After=multi-user.target After=multi-user.target

View File

@ -44,7 +44,7 @@ fi
# start chromium # start chromium
URL=$(get-ini /boot/kioskbrowser.ini browser url) URL=$(get-ini /boot/kioskbrowser.ini browser url)
chromium-browser --start-fullscreen \ chromium --start-fullscreen \
--allow-insecure-localhost \ --allow-insecure-localhost \
--autoplay-policy=no-user-gesture-required \ --autoplay-policy=no-user-gesture-required \
--check-for-update-interval=1 \ --check-for-update-interval=1 \

View File

@ -1,2 +0,0 @@
#!/bin/bash
exec openbox-session

View File

@ -6,7 +6,8 @@ then
if [ -f "/boot/id_rsa" ]; then if [ -f "/boot/id_rsa" ]; then
cp /boot/id_rsa /root/.ssh/id_rsa cp /boot/id_rsa /root/.ssh/id_rsa
AUTOSSH_KEYPATH="-i /root/.ssh/id_rsa" AUTOSSH_KEYPATH="-i /root/.ssh/id_rsa"
elif [ -f "/boot/id_ed25519" ]; then fi
if [ -f "/boot/id_ed25519" ]; then
cp /boot/id_ed25519 /root/.ssh/id_ed25519 cp /boot/id_ed25519 /root/.ssh/id_ed25519
AUTOSSH_KEYPATH="-i /root/.ssh/id_ed25519" AUTOSSH_KEYPATH="-i /root/.ssh/id_ed25519"
fi fi

View File

@ -16,7 +16,14 @@ remount_root() {
get_ini_value() { get_ini_value() {
get-ini "$INI_FILE" "$1" "$2" local section=$1 key=$2
awk -F '=' -v sec="$section" -v k="$key" '
$0 ~ /^\[.*\]/ { in_section = ($0 == "[" sec "]") }
in_section && $1 ~ "^"k"$" {
gsub(/^[ \t]+|[ \t]+$/, "", $2)
print $2
exit
}' "$INI_FILE"
} }
create_recurring_timer() { create_recurring_timer() {

View File

@ -1,7 +1,9 @@
#!/bin/bash #!/bin/bash
INI_FILE="/boot/kioskbrowser.ini" INI_FILE="/boot/kioskbrowser.ini"
REFRESH_INTERVAL=$(get-ini "$INI_FILE" screen refresh_screen_every_x_min) REFRESH_INTERVAL=$(awk -F '=' '/^\[screen\]/ { in_screen=1; next }
in_screen && /^\[/ { in_screen=0 }
in_screen && $1 ~ /refresh_screen_every_x_min/ { gsub(/ /, "", $2); print $2 }' "$INI_FILE")
# Function to safely remount root FS # Function to safely remount root FS
remount_root() { remount_root() {

View File

@ -1,4 +1,5 @@
<h1>Kioskbrowser</h1> <h1>Kioskbrowser</h1>
<h2>Version: <?php echo exec('git describe --tags --abbrev=0'); ?></h2>
CPU temperature: <br> CPU temperature: <br>
<?php passthru("sudo vcgencmd measure_temp"); ?> <?php passthru("sudo vcgencmd measure_temp"); ?>

View File

@ -1 +1 @@
console=serial0,115200 console=tty1 root=PARTUUID=544c6228-02 rootfstype=ext4 ro rootwait logo.nologo consoleblank=0 loglevel=0 quiet console=serial0,115200 console=tty1 root=PARTUUID=544c6228-02 rootfstype=ext4 rw rootwait logo.nologo consoleblank=0 loglevel=0 quiet

View File

@ -61,4 +61,3 @@ arm_boost=1
[all] [all]
avoid_warnings=1 avoid_warnings=1
dtparam=spi=on

View File

@ -12,10 +12,3 @@ APT_LISTCHANGES_FRONTEND=none DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Option
# be less tested as the currently shipping kernel in the Raspberry Pi images. # be less tested as the currently shipping kernel in the Raspberry Pi images.
apt install -y rpi-update apt install -y rpi-update
SKIP_CHECK_PARTITION=1 SKIP_WARNING=1 rpi-update SKIP_CHECK_PARTITION=1 SKIP_WARNING=1 rpi-update
# Install Hyperion.ng
wget -qO- https://apt.hyperion-project.org/hyperion.pub | gpg --dearmor -o /usr/share/keyrings/hyperion.pub
echo "deb [signed-by=/usr/share/keyrings/hyperion.pub] https://apt.hyperion-project.org/ bookworm main" > /etc/apt/sources.list.d/hyperion.list
apt update
apt install -y hyperion
systemctl enable hyperion.service