#!/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 . # # 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 -n "$CONTENT" | xclip -i echo -n "$CONTENT" | xsel -i else #echo -n "$CONTENT" | kvmx ssh $VM -X 'DISPLAY=:0 xclip -i -l 1' echo -n "$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/ .*//' | sort`" 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