W tym temacie postaram się umieścić przynajmniej wpisy o uzyskiwaniu dwóch kursorów myszki i dwóch klawiatur, a także wpisy o przydzielaniu kursora lub klawiatury do aplikacji, a w przyszłości o uruchamianiu dwóch serwerów X-ów na jednej karcie graficznej. Jak na razie opiszę tylko, jak rozdzielić dwie myszki i klawiatury, a także, jak przypisać je do jakiejś aplikacji.
Przedwczoraj zakupiłem klawiaturę bezprzewodową z trakballem. Jako, że mam dwa monitory(posiadanie dwóch monitorów nie jest wymagane, by dokonać tego, co opiszę), to postanowiłem wypróbować swoich sił jednocześnie grając i czytając. Wcześniej, dzięki smartfonowi z Androidem, wypróbowałem swoich sił jednocześnie programując i oglądając telewizję, ale to nie temat tego wpisu.
Serwer X od dawna obsługuje rozszerzenie XInput2, które pozwala na posiadanie dwóch kursorów myszki i rozdzielenie klawiatur. Kiedyś ktoś zapytał na tym forum, jak można jednocześnie mieć dwa kursory myszki. Odpowiedziałem, żę trzeba mieć wiedzę z zakresu programowania, gdyż obecnie żaden menadżer okien nie wspiera XInput2. No cóż, jeżeli konieczność wpisania kilku komend w terminalu uznać za umiejętność programowania, to miałem rację. Jednak do rzeczy.
By uzyskać listę urządzeń, należy wpisać:
xinput list
Spowoduje to wyświetlenie wszystkich urządzeń, nad którymi kontrolę sprawuje bieżący serwer X. Urządzenie mogą być wolne(i jednocześnie wyłączone) lub przypisane do wirtualnego urządzenia.Wirtualne urządzenie zbiera dane z przypisanych mu urządzeń, i przesyła je do aplikacji.
Oto przykład tego, co może pokazać xinput list:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS GlidePoint id=13 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=12 [slave keyboard (3)]
⎡ 100 pointer id=14 [master pointer (15)]
⎜ ↳ HOLTEK Wireless USB Device id=11 [slave pointer (14)]
⎜ ↳ 100 XTEST pointer id=16 [slave pointer (14)]
⎣ 100 keyboard id=15 [master keyboard (14)]
↳ HOLTEK Wireless USB Device id=10 [slave keyboard (15)]
↳ 100 XTEST keyboard id=17 [slave keyboard (15)]
Domtyślnie wszystkie urządzenie, nad którymi aktywny serwer X sprawuje kontrolę, są przypisane do Virtual core. Ja utworzyłem dodatkowe urządzenie wirtualne o nazwie 100, do którego przypisałem swoją klawiaturę i trackbala USB.
Najpierw musimy utworzyć nowe urządzenie wirtualne, o w ten sposób:
xinput create-mater nazwa_pana
W moim wypadku nazwa_pana, to 100. Następnie wybieramy urządzenia do przypisania do pana, i zapamiętujemy numer przyporządkowany naszemu urządzeniu, po ciągu id=. Teraz zapamiętujemy numer w nawiasie dla klawiatury i myszki wirtualnej(po ciągu master keyboard, master pointer). Teraz wcześniej zapamiętane numery dla klawiatury fizycznej i myszki fizycznej wykorzystujemy, by zdezaktywować urządzenia:
xinput float id_myszki
xinput float id_klawiatury
Teraz należy je przypisać do władcy(pana), o tak:
xinput reattach id_myszki id_po_master_pointer
xinput reattach id_klawiatury id_po_master_keyboard
Efekt? Mamy dwa kursory myszki!