Stop the kiosk coming up blank after every reboot
A reboot kills Chromium rather than closing it, so it writes "exit_type":"Crashed" into its profile. On the next boot it came up with a restore prompt and a tab stuck for ever on a blank "Loading..." page - navigation never committed, navigator.serviceWorker was still undefined, nothing on screen. On a device with a monitor and no keyboard that is permanent, and the backend was healthy throughout: / answered in 5 ms and /api/library returned 812 kB the whole time. --disable-session-crashed-bubble hides the prompt but not the state behind it, and here the prompt showed anyway. .xinitrc now rewrites exit_type and exited_cleanly before launching, which is the usual remedy for a kiosk that gets powered off rather than shut down, and adds --hide-crash-restore-bubble (the current name for the flag). Verified by rebooting and leaving it alone: the page comes up on its own with its title and its content. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -26,6 +26,15 @@
|
||||
src: "{{ pi_musicmouse_build_cache }}/{{ musicmouse_version | regex_replace('/', '_') }}/web/dist/"
|
||||
dest: /opt/musicmouse/web/dist/
|
||||
delete: true
|
||||
notify: Record which commit the frontend was built from
|
||||
|
||||
- name: Record which commit the frontend was built from
|
||||
# After the sync, and outside dist/, which the sync empties of anything it did not
|
||||
# build. This is what lets the next run tell a current dist from a stale one.
|
||||
ansible.builtin.copy:
|
||||
content: "{{ pi_musicmouse_web_checkout.after }}\n"
|
||||
dest: /opt/musicmouse/web/.built-commit
|
||||
mode: "0644"
|
||||
notify: Restart musicmouse
|
||||
|
||||
- name: Restart musicmouse
|
||||
|
||||
@@ -194,21 +194,34 @@
|
||||
become: false
|
||||
vars:
|
||||
ansible_become: false # see the first delegated task in tasks/main.yml
|
||||
register: pi_musicmouse_web_checkout
|
||||
notify: Build frontend
|
||||
|
||||
- name: Check whether the device has a built frontend
|
||||
ansible.builtin.stat:
|
||||
path: /opt/musicmouse/web/dist/index.html
|
||||
register: pi_musicmouse_dist
|
||||
- name: Read which commit the frontend on the device was built from
|
||||
# Same guard as the venv's .installed-commit above, and for the same reason. Hanging
|
||||
# the build chain off the control machine's checkout changing has a hole: a run that
|
||||
# fails after the checkout leaves the device's dist as it was, and every later run
|
||||
# finds the checkout current and rebuilds nothing, while ansible reports no changes.
|
||||
# Stale is the dangerous case - a missing dist is at least obvious - and it is exactly
|
||||
# what happens after a dist is replaced by hand, which is easy to do while chasing a
|
||||
# performance problem on the device.
|
||||
#
|
||||
# The stamp lives beside dist/ rather than inside it: `Sync frontend` rsyncs with
|
||||
# --delete, so anything in dist/ that the build did not produce is removed.
|
||||
ansible.builtin.command:
|
||||
cmd: cat /opt/musicmouse/web/.built-commit
|
||||
register: pi_musicmouse_web_stamp
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
|
||||
- name: Queue a frontend build when the device has none
|
||||
# The build chain hangs off the control machine's checkout changing, which has the
|
||||
# same hole the backend install had: a run that fails after that checkout leaves the
|
||||
# Pi with no dist, and every later run finds the checkout current and rebuilds
|
||||
# nothing. Cheap to check, and it only fires when the device really has no UI.
|
||||
- name: Queue a frontend build when the device's is missing or from another commit
|
||||
ansible.builtin.debug:
|
||||
msg: "No frontend at /opt/musicmouse/web/dist - queueing a build"
|
||||
when: not pi_musicmouse_dist.stat.exists
|
||||
msg: >-
|
||||
Frontend on the device is at
|
||||
{{ pi_musicmouse_web_stamp.stdout | default('(none)', true) | trim }},
|
||||
wanted {{ pi_musicmouse_web_checkout.after }} - queueing a build
|
||||
when: pi_musicmouse_web_stamp.stdout | default('', true) | trim
|
||||
!= pi_musicmouse_web_checkout.after
|
||||
changed_when: true
|
||||
notify: Build frontend
|
||||
|
||||
|
||||
Reference in New Issue
Block a user