diff --git a/Makefile b/Makefile index 5a19bca..22b2891 100644 --- a/Makefile +++ b/Makefile @@ -247,6 +247,8 @@ endif install qubes-rpc/qvm-copy-to-vm.gnome $(DESTDIR)$(LIBDIR)/qubes install qubes-rpc/qvm-move-to-vm.kde $(DESTDIR)$(LIBDIR)/qubes install qubes-rpc/qvm-move-to-vm.gnome $(DESTDIR)$(LIBDIR)/qubes + install qubes-rpc/qvm-actions.sh $(DESTDIR)$(LIBDIR)/qubes + install -m 0644 misc/uca_qubes.xml $(DESTDIR)$(LIBDIR)/qubes install qubes-rpc/xdg-icon $(DESTDIR)$(LIBDIR)/qubes install qubes-rpc/{vm-file-editor,qfile-agent,qopen-in-vm} $(DESTDIR)$(LIBDIR)/qubes install qubes-rpc/qubes-open $(DESTDIR)$(BINDIR) diff --git a/misc/uca_qubes.xml b/misc/uca_qubes.xml new file mode 100644 index 0000000..f158e3c --- /dev/null +++ b/misc/uca_qubes.xml @@ -0,0 +1,72 @@ + + folder-copy + Copy to VM + 1507455450991127-4 + /usr/lib/qubes/qvm-actions.sh copy %F + + * + + + + + + + + + folder-move + Move to VM + 1507455437157027-3 + /usr/lib/qubes/qvm-actions.sh move %F + + * + + + + + + + + + document-open + Open in VM + 1507455471075266-5 + /usr/lib/qubes/qvm-actions.sh openvm %F + + * + + + + + + + + gtk-convert + Convert in DisposableVM + 1507455488971315-6 + /usr/lib/qubes/qvm-actions.sh p %F + + *.pdf + + + + gtk-convert + Convert in DisposableVM + 1507455503129941-7 + /usr/lib/qubes/qvm-actions.sh img %F + + * + + + + document-open + Open in DisposableVM + 1507455559234996-8 + /usr/lib/qubes/qvm-actions.sh opendvm %F + + * + + + + + + diff --git a/qubes-rpc/qvm-actions.sh b/qubes-rpc/qvm-actions.sh new file mode 100755 index 0000000..789dd12 --- /dev/null +++ b/qubes-rpc/qvm-actions.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# Allow us to handle filenames with spaces using newline separator from Thunar +IFS=' +' + +# Check if at least two arguments are provided: actions + file(s) +if [ "$#" -le 1 ]; then + echo "Not enough arguments provided. Aborting..." +fi + +# File(s) +files=${*:2} + +# copy and move handle a list of files where other actions don't +case $1 in + copy) + qvm-copy-to-vm '$default' $files | zenity --notification --text="Copying files..." --timeout 3 + ;; + move) + qvm-move-to-vm '$default' $files | zenity --notification --text="Moving files..." --timeout 3 + ;; + img) + for file in $files + do + /usr/lib/qubes/qvm-convert-img.gnome $file + done + ;; + pdf) + for file in $files + do + /usr/lib/qubes/qvm-convert-pdf.gnome $file + done + ;; + openvm) + for file in $files + do + qvm-open-in-vm '$default' $file | zenity --notification --text "Opening $file in VM..." --timeout 3 & + done + ;; + opendvm) + for file in $files + do + qvm-open-in-dvm $files | zenity --notification --text "Opening $file in DisposableVM..." --timeout 3 & + done + ;; + *) + echo "Unknown action. Aborting..." + exit 1 + ;; +esac diff --git a/rpm_spec/core-agent.spec b/rpm_spec/core-agent.spec index 76251e2..978e4f2 100644 --- a/rpm_spec/core-agent.spec +++ b/rpm_spec/core-agent.spec @@ -268,6 +268,13 @@ switching from user to root. Since all the user data in a VM is accessible already from normal user account, there is not much more to guard there. Qubes VM is a single user system. +%package thunar +Summary: Thunar support for Qubes VM tools +Requires: Thunar + +%description thunar +Thunar support for Qubes VM tools + %define _builddir %(pwd) %define kde_service_dir /usr/share/kde4/services @@ -463,6 +470,22 @@ sed 's/^net.ipv4.ip_forward.*/#\0/' -i /etc/sysctl.conf %post qrexec %systemd_post qubes-qrexec-agent.service +%post thunar +# There is no system-wide Thunar custom actions. There is only a default +# file and a user file created from the default one. Qubes actions need +# to be placed after all already defined actions and before +# the end of file. +if [ "$1" = 1 ]; then + if [ -f /etc/xdg/Thunar/uca.xml ] ; then + cp -p /etc/xdg/Thunar/uca.xml{,.bak} + sed -i '$e cat /usr/lib/qubes/uca_qubes.xml' /etc/xdg/Thunar/uca.xml + fi + if [ -f /home/user/.config/Thunar/uca.xml ] ; then + cp -p /home/user/.config/Thunar/uca.xml{,.bak} + sed -i '$e cat /usr/lib/qubes/uca_qubes.xml' /home/user/.config/Thunar/uca.xml + fi +fi + %preun if [ "$1" = 0 ] ; then # no more packages left @@ -484,6 +507,18 @@ fi %preun qrexec %systemd_preun qubes-qrexec-agent.service +%postun thunar +if [ "$1" = 0 ]; then + if [ -f /etc/xdg/Thunar/uca.xml ] ; then + mv /etc/xdg/Thunar/uca.xml{,.uninstall} + mv /etc/xdg/Thunar/uca.xml{.bak,} + fi + if [ -f /home/user/.config/Thunar/uca.xml ] ; then + mv /home/user/.config/Thunar/uca.xml{,.uninstall} + mv /home/user/.config/Thunar/uca.xml{.bak,} + fi +fi + %postun if [ $1 -eq 0 ] ; then /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : @@ -674,6 +709,10 @@ rm -f %{name}-%{version} /usr/share/nautilus-python/extensions/qvm_move_nautilus.py* /usr/share/nautilus-python/extensions/qvm_dvm_nautilus.py* +%files thunar +/usr/lib/qubes/qvm-actions.sh +/usr/lib/qubes/uca_qubes.xml + %files dom0-updates %dir %attr(0775,user,user) /var/lib/qubes/dom0-updates /usr/lib/qubes/qubes-download-dom0-updates.sh