i3-copy-scripts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/bin/bash
  2. #This script copies all the scripts specified in a file to a vm of your choice.
  3. #This is a qubes-os specific script.
  4. # i3-copy-scripts - Copy scripts to a vm of your choice.
  5. # Copyright (C) 2017 Fabrizio Romano Genovese <egonigredo@gmail.com>
  6. # This copyrighted material is made available to anyone wishing to use,
  7. # modify, copy, or redistribute it subject to the terms and conditions of
  8. # the GNU General Public License v.2, or (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful, but WITHOUT
  11. # ANY WARRANTY expressed or implied, including the implied warranties of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  13. # Public License for more details.
  14. # You should have received a copy of the
  15. # GNU General Public License along with this program; if not,
  16. # see <http://www.gnu.org/licenses/>
  17. # Put this file in /bin/ or in /usr/bin. Do not forget to give
  18. # sudo chmod +x i3-copy-scripts
  19. # to make it executable.
  20. # The subroutine that copies files
  21. version=1.0
  22. config_file=~/.config/i3/i3-copy-scripts
  23. # This is the subroutine that performs the copying.
  24. # It checks that the config file exists and is not empty before
  25. # proceeding.
  26. copy_scripts()
  27. {
  28. line_number=1
  29. if [ ! -f $config_file ]; then
  30. echo "The config file does not exist!"
  31. exit 2
  32. elif [ -z `sed -n "1p" $config_file` ]; then
  33. echo "The config file is empty!"
  34. exit 2
  35. else
  36. # Here we copy all the scripts specified in the file
  37. # until we hit an empty line
  38. while [ ! -z `sed -n "${line_number}p" $config_file` ]; do
  39. script=`sed -n "${line_number}p" $config_file`
  40. # Here we abort if a script specified in the file does not exist
  41. # or cannot be located
  42. if [ ! -f $script ]; then
  43. echo "The script '$script' does not exist or I cannot find it."
  44. echo "Aborting."
  45. exit 2
  46. fi
  47. # For security reason we don't want to export executable scripts.
  48. # So we make the script not executable, we pass it to the app vm
  49. # and we make it executable again for dom0. The change of permission must be done
  50. # locally, since invoking it with qvm-run within the appvm causes permission
  51. # problems.
  52. sudo chmod -x $script
  53. qvm-copy-to-vm $1 $script
  54. sudo chmod +x $script
  55. let line_number=line_number+1
  56. done
  57. fi
  58. }
  59. # Here we give help messages and the like
  60. if [[ $# -le 1 ]]; then
  61. case $1 in
  62. -v | --version)
  63. echo "$0 - Version $version"
  64. exit 0
  65. ;;
  66. -h | --help)
  67. echo "This script is QubesOS specific."
  68. echo "It copies all the scripts specified in a file to a vm of your choice."
  69. echo "All the scripts must be specified in the format"
  70. echo "/path/to/script/script"
  71. echo "There has to be one script per line, whithout empty lines."
  72. echo "The scripts to copy have to be specified in the file ~./config/i3/i3-copy-scripts."
  73. echo "- v, --version Display current version"
  74. echo "-h, --help Display this message"
  75. echo "vmname Copies the scripts to vmname appvm"
  76. exit 0
  77. ;;
  78. *)
  79. # Gives usage instruction if imput is empty
  80. if [ -z ${1} ]; then
  81. echo "Usage: $0 {-v, --version|-h, --help|up|toggle|down}"
  82. exit 2
  83. fi
  84. # Check if the appvm exists
  85. if [ ! -d /var/lib/qubes/appvms/${1} ]; then
  86. echo "The appvm '$1' does not exist."
  87. echo "Usage: $0 {-v, --version|-h, --help|up|toggle|down}"
  88. echo "Aborting."
  89. exit 2
  90. else
  91. # If the appvm exists, it copies the files
  92. copy_scripts $1
  93. fi
  94. esac
  95. fi