/
usbreconnect.sh
executable file
·40 lines (32 loc) · 1.18 KB
/
usbreconnect.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash
USER=$SUDO_USER
VMID=$1
CONF=/etc/usbredirclient.conf
TOKENS=$(awk "/^\[${USER}/ {p=1; next}; /^\[/ {p=0}; p" $CONF | sed -e '/[;#].*/d' -e '/^$/d' | grep "^$VMID")
if [ "$TOKENS" = "" ]; then echo "no assigned USB"; exit 1; fi
IFS=$'\n'
for i in $TOKENS; do
VMID=$(echo $i| awk -F'[=:]' '{print $1}')
HOST=$(echo $i| awk -F'[=:]' '{print $2}')
PORT=$(echo $i| awk -F'[=:]' '{print $3}')
numberfile=/var/lib/usbredirclient/$VMID-$HOST:$PORT
number=$(cat $numberfile)
if ! [[ $number =~ ^-?[0-9]+$ ]] ; then
echo 0 > $numberfile
number=0
fi
newnumber=$[$number+1]
echo $newnumber > $numberfile
RUN=$(
expect << EOF
spawn /usr/sbin/qm monitor ${VMID}
send "device_del usbredirdev${HOST}-${PORT}-${number}\r";
send "chardev-remove usbredirchardev${HOST}-${PORT}-${number}\r";
send "chardev-add socket,id=usbredirchardev${HOST}-${PORT}-${newnumber},port=${PORT},host=${HOST}\r";
send "device_add usb-redir,chardev=usbredirchardev${HOST}-${PORT}-${newnumber},id=usbredirdev${HOST}-${PORT}-${newnumber},bus=ehci.0,debug=4\r";
send "quit\r"; expect eof
EOF
)
echo "$RUN"
#echo "$RUN" | grep 'Failed\|no such VM' && exit 1
done