Skip to content

Instantly share code, notes, and snippets.

@vchatela
Created January 12, 2026 19:14
Show Gist options
  • Select an option

  • Save vchatela/109e99d74cbcff0495f09aa5acb90bc5 to your computer and use it in GitHub Desktop.

Select an option

Save vchatela/109e99d74cbcff0495f09aa5acb90bc5 to your computer and use it in GitHub Desktop.
---
- name: Install and configure Immich Kiosk kiosk mode
hosts: immichkiosk
become: yes
gather_facts: yes
vars:
kiosk_user: "{{ hostvars[inventory_hostname]['piphoto-user'] }}"
tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- name: Ensure immich-kiosk user exists
user:
name: "{{ kiosk_user }}"
state: present
shell: /bin/bash
create_home: yes
home: "/home/{{ kiosk_user }}"
groups: video,audio
append: yes
- name: Install X server and window manager packages
apt:
name:
- xserver-xorg
- x11-xserver-utils
- xinit
- openbox
state: present
install_recommends: no
- name: Check if chromium package is available
command: apt-cache show chromium
register: chromium_check
changed_when: false
failed_when: false
- name: Set chromium package name based on availability
set_fact:
chromium_package: "{{ 'chromium' if chromium_check.rc == 0 else 'chromium-browser' }}"
- name: Install Chromium browser
apt:
name:
- "{{ chromium_package }}"
state: present
install_recommends: no
- name: Ensure openbox config directory exists
file:
path: /etc/xdg/openbox
state: directory
mode: '0755'
- name: Create immich-frame autostart script
template:
src: immich-frame-autostart.sh.j2
dest: /opt/immich-frame-autostart.sh
mode: '0755'
owner: root
group: root
- name: Configure openbox autostart
copy:
content: |
# Immich Frame Kiosk Autostart Configuration
/opt/immich-frame-autostart.sh &
dest: /etc/xdg/openbox/autostart
mode: '0644'
owner: root
group: root
- name: Ensure user home directory exists
file:
path: "/home/{{ kiosk_user }}"
state: directory
owner: "{{ kiosk_user }}"
group: "{{ kiosk_user }}"
mode: '0755'
- name: Configure automatic X server start in .bash_profile
blockinfile:
path: "/home/{{ kiosk_user }}/.bash_profile"
create: yes
owner: "{{ kiosk_user }}"
group: "{{ kiosk_user }}"
mode: '0644'
marker: "# {mark} ANSIBLE MANAGED BLOCK - Immich Kiosk Auto Start"
block: |
# Auto-start X server on TTY1 for kiosk mode
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx -- -nocursor
- name: Create Chromium config directory for user
file:
path: "/home/{{ kiosk_user }}/.config/chromium"
state: directory
owner: "{{ kiosk_user }}"
group: "{{ kiosk_user }}"
mode: '0755'
recurse: yes
- name: Create systemd service directory for getty override
file:
path: /etc/systemd/system/getty@tty1.service.d
state: directory
mode: '0755'
- name: Create systemd service override for automatic login
copy:
content: |
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin {{ kiosk_user }} --noclear %i $TERM
dest: /etc/systemd/system/getty@tty1.service.d/override.conf
mode: '0644'
owner: root
group: root
- name: Enable automatic login service
systemd:
name: getty@tty1.service
enabled: yes
daemon_reload: yes
- name: Display configuration summary
debug:
msg: |
Immich Frame kiosk mode installation completed!
Configuration Summary:
- Target URL: {{ hostvars[inventory_hostname]['immich-kiosk-url'] }}
- Kiosk User: {{ kiosk_user }}
- Autostart Script: /opt/immich-frame-autostart.sh
- Openbox Config: /etc/xdg/openbox/autostart
The system will automatically:
1. Login as {{ kiosk_user }} on TTY1
2. Start X server with cursor disabled
3. Launch Chromium in kiosk mode
4. Display the Immich frame website
Reboot the system to activate kiosk mode.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment