diff options
Diffstat (limited to 'kvmx-clipboard')
-rwxr-xr-x | kvmx-clipboard | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/kvmx-clipboard b/kvmx-clipboard new file mode 100755 index 0000000..3005c51 --- /dev/null +++ b/kvmx-clipboard @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +# +# kvmx-clipboard manage clipboard sharing between host and guests +# +# Copyright (C) 2018 Silvio Rhatto - rhatto at riseup.net +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation, either version 3 of the License, +# or any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty 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 <http://www.gnu.org/licenses/>. +# + +# Parameters +CONTENT="" + +function __kvmx_clipboard_receive { + local VM="$1" + + if [ "$VM" == "host" ]; then + #CONTENT="`xclip -o`" + CONTENT="`xsel -o`" + else + #CONTENT="`kvmx ssh $VM -X 'DISPLAY=:0 xclip -o'`" + CONTENT="`kvmx ssh $VM -X 'xsel -o --display :0'`" + fi +} + +function __kvmx_clipboard_send { + local VM="$1" + + if [ "$VM" == "host" ]; then + #echo $CONTENT | xclip -i + echo $CONTENT | xsel -i + else + #echo $CONTENT | kvmx ssh $VM -X 'DISPLAY=:0 xclip -i -l 1' + echo $CONTENT | kvmx ssh $VM -X 'xsel -i --display :0' + fi +} + +function __kvmx_clipboard_copy { + local ORIG="$1" + local DEST="$2" + + __kvmx_clipboard_receive $ORIG + __kvmx_clipboard_send $DEST +} + +function __kvmx_clipboard_list { + # That's crude, but fast + instances="`ps aux | grep qemu-system | grep -- '-name ' | sed -e 's/^.*-name //' -e 's/ .*//'`" + instances="host $instances" + + echo "KVMX Clipboard" + echo "" + + n="0" + + # Buld menu entries + for orig_instance in $instances; do + for dest_instance in $instances; do + if [ "$orig_instance" == "$dest_instance" ]; then + continue + fi + + echo "$n: $orig_instance -> $dest_instance" + + let n++ + done + done +} + +function __kvmx_clipboard_menu { + __kvmx_clipboard_list + + echo "" + read -rep "Your choice: " n + + choice="$(__kvmx_clipboard_list | grep ^$n: | sed -e "s/^$n://" -e "s/->//")" + + if [ ! -z "$choice" ]; then + __kvmx_clipboard_copy $choice + fi +} + +# Main +if [ -z "$2" ]; then + __kvmx_clipboard_menu +else + __kvmx_clipboard_copy $1 $2 +fi |