Refactor enable_usb_passthrough()

USB host pass-through no longer builds a script and executes it. It will now display any required USB permission changes and halt execution until they are correct.
This commit is contained in:
Martin Wimpress 2021-09-25 13:38:54 +01:00
parent f18d8e994e
commit df4f12a3ad
No known key found for this signature in database
GPG Key ID: 61DF940515E06DA3
1 changed files with 12 additions and 23 deletions

View File

@ -109,42 +109,31 @@ function enable_usb_passthrough() {
local USB_NAME="" local USB_NAME=""
local VENDOR_ID="" local VENDOR_ID=""
local PRODUCT_ID="" local PRODUCT_ID=""
local TEMP_SCRIPT="" local USB_NOT_READY=0
local EXEC_SCRIPT=0
TEMP_SCRIPT=$(mktemp)
# Have any USB devices been requested for pass-through? # Have any USB devices been requested for pass-through?
if (( ${#usb_devices[@]} )); then if (( ${#usb_devices[@]} )); then
echo " - USB: Device pass-through requested:" echo " - USB: Host pass-through requested:"
echo "#!/usr/bin/env bash" > "${TEMP_SCRIPT}"
for DEVICE in "${usb_devices[@]}"; do for DEVICE in "${usb_devices[@]}"; do
VENDOR_ID=$(echo "${DEVICE}" | cut -d':' -f1) VENDOR_ID=$(echo "${DEVICE}" | cut -d':' -f1)
PRODUCT_ID=$(echo "${DEVICE}" | cut -d':' -f2) PRODUCT_ID=$(echo "${DEVICE}" | cut -d':' -f2)
USB_BUS=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f2) USB_BUS=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f2)
USB_DEV=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f4 | cut -d':' -f1) USB_DEV=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f4 | cut -d':' -f1)
USB_NAME=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f7-) USB_NAME=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f7-)
echo " - ${USB_NAME}" if [ -w "/dev/bus/usb/${USB_BUS}/${USB_DEV}" ]; then
USB_PASSTHROUGH="${USB_PASSTHROUGH} -device usb-host,vendorid=0x${VENDOR_ID},productid=0x${PRODUCT_ID},bus=usb.0" echo " o ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} is accessible."
if [ ! -w "/dev/bus/usb/${USB_BUS}/${USB_DEV}" ]; then else
local EXEC_SCRIPT=1 echo " x ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} needs permission changes:"
echo "chown root:${USER} /dev/bus/usb/${USB_BUS}/${USB_DEV}" >> "${TEMP_SCRIPT}" echo " sudo chown -v root:${USER} /dev/bus/usb/${USB_BUS}/${USB_DEV}"
USB_NOT_READY=1
fi fi
USB_PASSTHROUGH="${USB_PASSTHROUGH} -device usb-host,vendorid=0x${VENDOR_ID},productid=0x${PRODUCT_ID},bus=hostpass.0"
done done
if [ ${EXEC_SCRIPT} -eq 1 ]; then if [ "${USB_NOT_READY}" -eq 1 ]; then
chmod +x "${TEMP_SCRIPT}" echo " ERROR! USB permission changes are required 👆"
echo " Requested USB device(s) are NOT accessible." exit 1
echo " ${TEMP_SCRIPT} will be executed to enable access:"
echo
cat "${TEMP_SCRIPT}"
echo
if ! sudo "${TEMP_SCRIPT}"; then
echo " WARNING! Enabling USB device access failed."
fi fi
else
echo " Requested USB device(s) are accessible."
fi
rm -f "${TEMP_SCRIPT}"
fi fi
} }