Browse Source

Add support for Thunar Qubes VM tools

Frédéric Pierret 6 years ago
parent
commit
0fd109b8f1
4 changed files with 164 additions and 0 deletions
  1. 2 0
      Makefile
  2. 72 0
      misc/uca_qubes.xml
  3. 51 0
      qubes-rpc/qvm-actions.sh
  4. 39 0
      rpm_spec/core-agent.spec

+ 2 - 0
Makefile

@@ -247,6 +247,8 @@ endif
 	install qubes-rpc/qvm-copy-to-vm.gnome $(DESTDIR)$(LIBDIR)/qubes
 	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.kde $(DESTDIR)$(LIBDIR)/qubes
 	install qubes-rpc/qvm-move-to-vm.gnome $(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/xdg-icon $(DESTDIR)$(LIBDIR)/qubes
 	install qubes-rpc/{vm-file-editor,qfile-agent,qopen-in-vm} $(DESTDIR)$(LIBDIR)/qubes
 	install qubes-rpc/{vm-file-editor,qfile-agent,qopen-in-vm} $(DESTDIR)$(LIBDIR)/qubes
 	install qubes-rpc/qubes-open $(DESTDIR)$(BINDIR)
 	install qubes-rpc/qubes-open $(DESTDIR)$(BINDIR)

+ 72 - 0
misc/uca_qubes.xml

@@ -0,0 +1,72 @@
+<action>
+	<icon>folder-copy</icon>
+	<name>Copy to VM</name>
+	<unique-id>1507455450991127-4</unique-id>
+	<command>/usr/lib/qubes/qvm-actions.sh copy %F</command>
+	<description></description>
+	<patterns>*</patterns>
+	<directories/>
+	<audio-files/>
+	<image-files/>
+	<other-files/>
+	<text-files/>
+	<video-files/>
+</action>
+<action>
+	<icon>folder-move</icon>
+	<name>Move to VM</name>
+	<unique-id>1507455437157027-3</unique-id>
+	<command>/usr/lib/qubes/qvm-actions.sh move %F</command>
+	<description></description>
+	<patterns>*</patterns>
+	<directories/>
+	<audio-files/>
+	<image-files/>
+	<other-files/>
+	<text-files/>
+	<video-files/>
+</action>
+<action>
+	<icon>document-open</icon>
+	<name>Open in VM</name>
+	<unique-id>1507455471075266-5</unique-id>
+	<command>/usr/lib/qubes/qvm-actions.sh openvm %F</command>
+	<description></description>
+	<patterns>*</patterns>
+	<audio-files/>
+	<image-files/>
+	<other-files/>
+	<text-files/>
+	<video-files/>
+</action>
+<action>
+	<icon>gtk-convert</icon>
+	<name>Convert in DisposableVM</name>
+	<unique-id>1507455488971315-6</unique-id>
+	<command>/usr/lib/qubes/qvm-actions.sh p %F</command>
+	<description></description>
+	<patterns>*.pdf</patterns>
+	<other-files/>
+</action>
+<action>
+	<icon>gtk-convert</icon>
+	<name>Convert in DisposableVM</name>
+	<unique-id>1507455503129941-7</unique-id>
+	<command>/usr/lib/qubes/qvm-actions.sh img %F</command>
+	<description></description>
+	<patterns>*</patterns>
+	<image-files/>
+</action>
+<action>
+	<icon>document-open</icon>
+	<name>Open in DisposableVM</name>
+	<unique-id>1507455559234996-8</unique-id>
+	<command>/usr/lib/qubes/qvm-actions.sh opendvm %F</command>
+	<description></description>
+	<patterns>*</patterns>
+	<audio-files/>
+	<image-files/>
+	<other-files/>
+	<text-files/>
+	<video-files/>
+</action>

+ 51 - 0
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

+ 39 - 0
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
 already from normal user account, there is not much more to guard there. Qubes
 VM is a single user system.
 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 _builddir %(pwd)
 
 
 %define kde_service_dir /usr/share/kde4/services
 %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
 %post qrexec
 %systemd_post qubes-qrexec-agent.service
 %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 </actions>
+# 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
 %preun
 if [ "$1" = 0 ] ; then
 if [ "$1" = 0 ] ; then
     # no more packages left
     # no more packages left
@@ -484,6 +507,18 @@ fi
 %preun qrexec
 %preun qrexec
 %systemd_preun qubes-qrexec-agent.service
 %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
 %postun
 if [ $1 -eq 0 ] ; then
 if [ $1 -eq 0 ] ; then
     /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
     /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_move_nautilus.py*
 /usr/share/nautilus-python/extensions/qvm_dvm_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
 %files dom0-updates
 %dir %attr(0775,user,user) /var/lib/qubes/dom0-updates
 %dir %attr(0775,user,user) /var/lib/qubes/dom0-updates
 /usr/lib/qubes/qubes-download-dom0-updates.sh
 /usr/lib/qubes/qubes-download-dom0-updates.sh