#!/bin/bash #This script copies all the scripts specified in a file to a vm of your choice. #This is a qubes-os specific script. # i3-copy-scripts - Copy scripts to a vm of your choice. # Copyright (C) 2017 Fabrizio Romano Genovese # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions of # the GNU General Public License v.2, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY expressed or implied, including the implied warranties of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # You should have received a copy of the # GNU General Public License along with this program; if not, # see # Put this file in /bin/ or in /usr/bin. Do not forget to give # sudo chmod +x i3-copy-scripts # to make it executable. # The subroutine that copies files version=1.0 config_file=~/.config/i3/i3-copy-scripts # This is the subroutine that performs the copying. # It checks that the config file exists and is not empty before # proceeding. copy_scripts() { line_number=1 if [ ! -f $config_file ]; then echo "The config file does not exist!" exit 2 elif [ -z `sed -n "1p" $config_file` ]; then echo "The config file is empty!" exit 2 else # Here we copy all the scripts specified in the file # until we hit an empty line while [ ! -z `sed -n "${line_number}p" $config_file` ]; do script=`sed -n "${line_number}p" $config_file` # Here we abort if a script specified in the file does not exist # or cannot be located if [ ! -f $script ]; then echo "The script '$script' does not exist or I cannot find it." echo "Aborting." exit 2 fi # For security reason we don't want to export executable scripts. # So we make the script not executable, we pass it to the app vm # and we make it executable again for dom0. The change of permission must be done # locally, since invoking it with qvm-run within the appvm causes permission # problems. sudo chmod -x $script qvm-copy-to-vm $1 $script sudo chmod +x $script let line_number=line_number+1 done fi } # Here we give help messages and the like if [[ $# -le 1 ]]; then case $1 in -v | --version) echo "$0 - Version $version" exit 0 ;; -h | --help) echo "This script is QubesOS specific." echo "It copies all the scripts specified in a file to a vm of your choice." echo "All the scripts must be specified in the format" echo "/path/to/script/script" echo "There has to be one script per line, whithout empty lines." echo "The scripts to copy have to be specified in the file ~./config/i3/i3-copy-scripts." echo "- v, --version Display current version" echo "-h, --help Display this message" echo "vmname Copies the scripts to vmname appvm" exit 0 ;; *) # Gives usage instruction if imput is empty if [ -z ${1} ]; then echo "Usage: $0 {-v, --version|-h, --help|up|toggle|down}" exit 2 fi # Check if the appvm exists if [ ! -d /var/lib/qubes/appvms/${1} ]; then echo "The appvm '$1' does not exist." echo "Usage: $0 {-v, --version|-h, --help|up|toggle|down}" echo "Aborting." exit 2 else # If the appvm exists, it copies the files copy_scripts $1 fi esac fi