diff --git a/misc/dispvm-dotfiles.tbz b/misc/dispvm-dotfiles.tbz new file mode 100644 index 0000000..42f0e27 Binary files /dev/null and b/misc/dispvm-dotfiles.tbz differ diff --git a/misc/dispvm-prerun.sh b/misc/dispvm-prerun.sh new file mode 100755 index 0000000..c0453f2 --- /dev/null +++ b/misc/dispvm-prerun.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +apps="evince /usr/libexec/evinced soffice firefox" + +cat /etc/dispvm-dotfiles.tbz | tar -xjf- --overwrite -C /home/user --owner user 2>&1 >/tmp/dispvm-dotfiles-errors.log + +for app in $apps ; do + echo "Launching: $app..." + $app >>/tmp/dispvm_prerun_errors.log 2>&1 & +done + +echo "Sleeping..." +PREV_IO=0 +while true; do + IO=`vmstat -D | awk '/read|write/ {IOs+=$1} END {print IOs}'` + if [ $IO -lt $[ $PREV_IO + 50 ] ]; then + break; + fi + PREV_IO=$IO + sleep 1 +done + +ps ax > /tmp/dispvm-prerun-proclist.log + +cat /etc/dispvm-dotfiles.tbz | tar -xjf- --overwrite -C /home/user --owner user 2>&1 >>/tmp/dispvm-dotfiles-errors.log + +echo done. diff --git a/qubes_rpc/prepare-suspend b/qubes_rpc/prepare-suspend new file mode 100755 index 0000000..4df1122 --- /dev/null +++ b/qubes_rpc/prepare-suspend @@ -0,0 +1,16 @@ +#!/bin/sh + +action=$1 +[ -z "$action" ] && action=suspend + +if [ x"$action" == x"suspend" ]; then + nmcli nm sleep true || service NetworkManager stop + # Force interfaces down, just in case when NM didn't done it + for if in `ls /sys/class/net|grep -v "lo\|vif"`; do + ip l s $if down + done + modprobe -r uhci_hcd ehci_hcd +else + modprobe ehci_hcd; modprobe uhci_hcd; + nmcli nm sleep false || { [ -x /bin/systemctl ] && systemctl start NetworkManager.service; } || service qubes_core_netvm start +fi diff --git a/qubes_rpc/qubes.SuspendPost b/qubes_rpc/qubes.SuspendPost new file mode 100644 index 0000000..73bf2ea --- /dev/null +++ b/qubes_rpc/qubes.SuspendPost @@ -0,0 +1 @@ +/usr/lib/qubes/prepare-suspend resume diff --git a/qubes_rpc/qubes.SuspendPre b/qubes_rpc/qubes.SuspendPre new file mode 100644 index 0000000..ad49fa6 --- /dev/null +++ b/qubes_rpc/qubes.SuspendPre @@ -0,0 +1 @@ +/usr/lib/qubes/prepare-suspend suspend diff --git a/rpm_spec/core-vm.spec b/rpm_spec/core-vm.spec index 8896b38..f24c679 100644 --- a/rpm_spec/core-vm.spec +++ b/rpm_spec/core-vm.spec @@ -119,6 +119,13 @@ install misc/qubes_trigger_sync_appmenus.sh $RPM_BUILD_ROOT/usr/lib/qubes/ install -D -m 0644 misc/qubes_trigger_sync_appmenus.action $RPM_BUILD_ROOT/etc/yum/post-actions/qubes_trigger_sync_appmenus.action mkdir -p $RPM_BUILD_ROOT/usr/lib/qubes +if [ -r misc/dispvm-dotfiles.%{dist}.tbz ]; then + install misc/dispvm-dotfiles.%{dist}.tbz $RPM_BUILD_ROOT/etc/dispvm-dotfiles.tbz +else + install misc/dispvm-dotfiles.tbz $RPM_BUILD_ROOT/etc/dispvm-dotfiles.tbz +fi +install misc/dispvm-prerun.sh $RPM_BUILD_ROOT/usr/lib/qubes/dispvm-prerun.sh + install -D misc/qubes_core.modules $RPM_BUILD_ROOT/etc/sysconfig/modules/qubes_core.modules install -m 0644 network/qubes_network.rules $RPM_BUILD_ROOT/etc/udev/rules.d/99-qubes_network.rules @@ -151,10 +158,12 @@ install qubes_rpc/qvm-copy-to-vm.gnome $RPM_BUILD_ROOT/usr/lib/qubes install qubes_rpc/{vm-file-editor,qfile-agent,qopen-in-vm,qfile-unpacker} $RPM_BUILD_ROOT/usr/lib/qubes install qubes_rpc/{vm-shell,qrun-in-vm} $RPM_BUILD_ROOT/usr/lib/qubes install qubes_rpc/sync-ntp-clock $RPM_BUILD_ROOT/usr/lib/qubes +install qubes_rpc/prepare-suspend $RPM_BUILD_ROOT/usr/lib/qubes install -d $RPM_BUILD_ROOT/%{kde_service_dir} install -m 0644 qubes_rpc/{qvm-copy.desktop,qvm-dvm.desktop} $RPM_BUILD_ROOT/%{kde_service_dir} install -d $RPM_BUILD_ROOT/etc/qubes_rpc install -m 0644 qubes_rpc/{qubes.Filecopy,qubes.OpenInVM,qubes.VMShell,qubes.SyncNtpClock} $RPM_BUILD_ROOT/etc/qubes_rpc +install -m 0644 qubes_rpc/{qubes.SuspendPre,qubes.SuspendPost} $RPM_BUILD_ROOT/etc/qubes_rpc install qrexec/qrexec_agent $RPM_BUILD_ROOT/usr/lib/qubes install qrexec/qrexec_client_vm $RPM_BUILD_ROOT/usr/lib/qubes @@ -355,6 +364,7 @@ rm -rf $RPM_BUILD_ROOT /etc/NetworkManager/dispatcher.d/30-qubes_external_ip /etc/NetworkManager/dispatcher.d/qubes_nmhook /etc/X11/xorg-preload-apps.conf +/etc/dispvm-dotfiles.tbz /etc/dhclient.d/qubes_setup_dnat_to_ns.sh /etc/fstab /etc/pki/rpm-gpg/RPM-GPG-KEY-qubes* @@ -363,6 +373,8 @@ rm -rf $RPM_BUILD_ROOT /etc/qubes_rpc/qubes.OpenInVM /etc/qubes_rpc/qubes.VMShell /etc/qubes_rpc/qubes.SyncNtpClock +/etc/qubes_rpc/qubes.SuspendPre +/etc/qubes_rpc/qubes.SuspendPost /etc/sudoers.d/qubes /etc/sysconfig/iptables /etc/sysconfig/modules/qubes_core.modules @@ -386,7 +398,9 @@ rm -rf $RPM_BUILD_ROOT /usr/lib/qubes/block_add_change /usr/lib/qubes/block_cleanup /usr/lib/qubes/block_remove +/usr/lib/qubes/dispvm-prerun.sh /usr/lib/qubes/sync-ntp-clock +/usr/lib/qubes/prepare-suspend /usr/lib/qubes/meminfo-writer /usr/lib/qubes/network-manager-prepare-conf-dir /usr/lib/qubes/qfile-agent