#!/bin/bash # # chkconfig: 345 85 85 # description: Executes Qubes core scripts at AppVM boot # # Source function library. . /etc/rc.d/init.d/functions possibly_run_save_script() { ENCODED_SCRIPT=$(qubesdb-read /qubes-save-script) if [ -z "$ENCODED_SCRIPT" ] ; then return ; fi echo $ENCODED_SCRIPT|perl -e 'use MIME::Base64 qw(decode_base64); local($/) = undef;print decode_base64()' >/tmp/qubes-save-script chmod 755 /tmp/qubes-save-script Xorg -config /etc/X11/xorg-preload-apps.conf :0 & while ! [ -S /tmp/.X11-unix/X0 ]; do sleep 0.5; done DISPLAY=:0 su - user -c /tmp/qubes-save-script killall Xorg } start() { type=$(/usr/bin/qubesdb-read /qubes-vm-type) if [ "$type" != "AppVM" -a "$type" != "DisposableVM" -a "$type" != "TemplateVM" ]; then # This script runs only on AppVMs return 0 fi # Start AppVM specific services start_cups=$(/usr/bin/qubesdb-read /qubes-service/cups 2> /dev/null) if [ "$start_cups" != "0" ]; then /sbin/service cups start # Allow also notification icon sed -i -e '/^NotShowIn=.*QUBES/s/;QUBES//' /etc/xdg/autostart/print-applet.desktop else # Disable notification icon sed -i -e '/QUBES/!s/^NotShowIn=\(.*\)/NotShowIn=QUBES;\1/' /etc/xdg/autostart/print-applet.desktop fi echo -n $"Executing Qubes Core scripts for AppVM:" if qubesdb-read /qubes-save-request 2>/dev/null ; then if [ -L /home ]; then rm /home mkdir /home fi mount --bind /home_volatile /home touch /etc/this-is-dvm mount /rw possibly_run_save_script umount /rw dmesg -c >/dev/null free | grep Mem: | (read a b c d ; qubesdb-write /qubes-used-mem $c) # give dom0 time to read some entries, when done it will shutdown qubesdb, # so wait for it qubesdb-watch /stop-qubesdb # just to make sure systemctl stop qubes-db.service # we're still running in DispVM template echo "Waiting for save/restore..." # the service will start only after successful restore systemctl start qubes-db.service echo Back to life. # Reload random seed qubesdb-read /qubes-random-seed | base64 -d > /dev/urandom qubesdb-rm /qubes-random-seed fi start_meminfo_writer=$(/usr/bin/qubesdb-read /qubes-service/meminfo-writer 2>/dev/null) if [ "$start_meminfo_writer" != "0" ]; then MEM_CHANGE_THRESHOLD_KB=30000 MEMINFO_DELAY_USEC=100000 /usr/lib/qubes/meminfo-writer $MEM_CHANGE_THRESHOLD_KB $MEMINFO_DELAY_USEC /var/run/meminfo-writer.pid fi success echo "" return 0 } stop() { return 0 } case "$1" in start) start ;; stop) stop ;; *) echo $"Usage: $0 {start|stop}" exit 3 ;; esac exit $RETVAL