переключение аудио в linux Trendnet USB-KVM Switcher
Как водится в обществе потребления, главное продать. Кто основные клиенты? Виндузятники. Вот для них и будем делать софт и драйвера. А для остальных не будем. А хули они линуксоиды? Сами виноваты!
Попробовал снифать usb. Он там передает какой-то bulk пакет на hid устройство, в одном случае число 4 в другом 5. Готовых исходников как посылать bulk пакеты я не нагуглил, а изучать все это дело лень, да и может не заработать.
Решил поступить как обычно: автоматизировать Windows форму с помощью Autoit. Благо на одном компе у меня стоит винда. А вот тем у кого нет винды ни на одном компьютере подключенном к kvm свичу — тем мой способ не подойдет. Разве только смогут пробросить это hid устройство в виртуалку с виндой (если это вообще не клавиатура или мышь).
Вот так выглядит приложение.
Написано на стандартной библиотеке, так что мышкокликательством заниматься не придется, что уже хорошо. Увы я не смог никак сделать, что-бы окно не перехватывало фокус. И скрыть окно я смог только выставив прозрачность в 255 — @SW_HIDE не работал. Но в общем вроде пригодно для использования.
#NoAppIcon
$title = «Trendnet USB-KVM Switcher» ; title of trendnet kvm window
$path = «C:\Program Files (x86)\Trendnet\USBKVM Switcher\USBKVM.exe» ; path to program file
if $CmdLine[0] = 0 Then
MsgBox(16,»Options», «Options:» & @CRLF & @ScriptName & » 1|2|3|4|disable»)
Exit
EndIf$ActiveWindow = WinGetHandle(«»)
if Not WinExists($title) Then ;if app not started — start it
Run($path)
WinWait($title)
EndIfWinSetTrans($title, «», 0) ; hide window, could not found better way
Run($path) ;activate window, cant do WinSetState, because somehow it dont work 😦
WinActivate($ActiveWindow) ;return focus — first blink
WinSetState($title,»»,@SW_SHOWNOACTIVATE)
if $CmdLine[1] = «disable» Then
ControlCommand($title,»», «[Class:Button; INSTANCE:8]», «Uncheck», «» )
Else
ControlCommand($title,»», «[Class:Button; INSTANCE:8]», «Check», «» )
ControlCommand($title,»», «[Class:ComboBox; INSTANCE:1]», «SelectString», $CmdLine[1] )
EndIf
While BitAND(WinGetState($title), 2) ;because OK button does not appear right after window is shown
ControlClick ( $title, «»,»[CLASS:Button; INSTANCE:1]»)
WEnd
WinActivate($ActiveWindow) ;return focus again — second blink (blinks only when switching is done indeed, not the same pc)
WinSetTrans($title, «», 255) ; return to make utility usable by human
После данной разработки появилась возможность управлять переключением звука хоткеями из винды (только надо настроить глобальный хоткей сторонним софтом). Ну а из линукса оно будет запускаться по ssh (он у меня для других целей стоял). Но можно и через веб сервер такое сделать (опять же смотря, что уже настроено)