20 нояб. 2016 г.

VMWare View client + USB

При работе с клиентом для подключения к корпоративной структуре VDI, которая реализована на базе VMWare Horizon, подключение к удаленному рабочему столу происходит посредством клиента VMWare View.
В случае работы с Linux-клиентом возникла проблема с работоспособностью bluetooth-гарнитуры, которая выражалась в пропадании устройства. Недолгие поиски выявили корень зла во включенном по умолчанию пробросе всех доступных usb-устройств (за исключением разве что устройств ввода) внутрь удаленной виртуалки. 
Куцые настройки в GUI не дают никакх возможностей для конфигурации, поэтому пришлось искать конфигурационные файлы. В этом сильно помогла официальная документация по клиенту, вот эта.
Кому лень искать, вышеуказанная проблема лечится следующей строчкой в /etc/vmware/config:
 viewusb.ExcludeAllDevices = "true"
Как можно догадаться из названия параметра, из пробрасываемых исключаются все найденные устройства. Если все же нужно получить на удаленной системе какие-то конкретные девайсы, можно пользоваться как указанием "семейств" устройств, так и явным указанием VID/PID: 
viewusb.IncludeFamily = "audio"
viewusb.IncludeVidPid = "Vid-0461_Pid-0010;Vid-0461_Pid-4d20"
Операциями по взаимодействию с USB-устройствами хоста занимается vmware-view-usbd, которую, полагаю, лучше перезапустить после изменения конфигурационных файлов.
root@inspire-hv:/home/delayer# systemctl status vmware-view-USBD.service
● vmware-view-USBD.service - LSB: This services starts and stops the View USBD.
   Loaded: loaded (/etc/init.d/vmware-view-USBD; generated; vendor preset: enabled)
   Active: active (running) since Вс 2016-11-20 15:38:01 MSK; 3h 56min ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/vmware-view-USBD.service
           └─1109 /usr/bin/vmware-view-usbd
Также в документе написано, что, кроме глобального конфига, параметры можно переопределять на уровне каждого пользователя, в файле ~/.vmware/config. Однако у меня изменения там не подхватывались. Но так как пользователь в моей домашней системе один, то необходимости в мультиклиентской конфигурации нет.

UPD:
В MacOS механика та же, но реализовано малость удобнее (как и много там =) ):
$ sudo defaults write com.vmware.viewusb ExcludeAllDevices true
$ sudo defaults read com.vmware.viewusb
{
    ExcludeAllDevices = true;
}