Linux :: два, три, пять… указателей мыши

    Не знаю зачем мне это пригодится, но очень вдруг захотелось иметь два указателя мыши в Linux, ведь две «мыши» у меня есть — собственно беспроводная мышь и тач-пад. Идея пришла в тот момент, когда я подключил вторую мышь, т.е. третье устройство управления указателем.


    Сколько мышей, столько и курсоров, но как?


    Давайте посмотрим — что скажет нам xinput:

    max 23:20:19   ~  $ xinput list
    ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
    ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    ⎜   ↳ Logitech USB Receiver                     id=10   [slave  pointer  (2)]
    ⎜   ↳ Logitech USB Receiver                     id=11   [slave  pointer  (2)]
    ⎜   ↳ Genius 2.4G Wireless Mouse                id=12   [slave  pointer  (2)]
    ⎜   ↳ SynPS/2 Synaptics TouchPad                id=14   [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)]
        ↳ Sleep Button                              id=8    [slave  keyboard (3)]
        ↳ Villem                                    id=9    [slave  keyboard (3)]
        ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]
        ↳ HP WMI hotkeys                            id=15   [slave  keyboard (3)]
    


    Я честно не знаю — почему USB-свисток от Logitech — выводится дважды. Буду благодарен, если кто-то подскажет — почему.

    Но я отвлекся! Из выхлопа видно, что у нас всего 4 мыши:

    • Виртуальная
    • Logitech
    • Genius
    • Touchpad


    Для того, чтобы увидеть второй курсор создадим группу:
    xinput create-master logitech


    Теперь на экране ДВА указателя мыши, но второй пока неподвижен, а управляют все три устройства одним и тем же указателем. Давайте скажем X-серверу, что Logitech будет управлять тем самым неподвижным до сих пор курсором. Для этого еще раз посмотрим на

    max 23:23:40   ~  $ xinput list
    ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
    ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    ⎜   ↳ Logitech USB Receiver                     id=10   [slave  pointer  (2)]
    ⎜   ↳ Logitech USB Receiver                     id=11   [slave  pointer  (2)]
    ⎜   ↳ Genius 2.4G Wireless Mouse                id=12   [slave  pointer  (2)]
    ⎜   ↳ SynPS/2 Synaptics TouchPad                id=14   [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)]
        ↳ Sleep Button                              id=8    [slave  keyboard (3)]
        ↳ Villem                                    id=9    [slave  keyboard (3)]
        ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]
        ↳ HP WMI hotkeys                            id=15   [slave  keyboard (3)]
    ⎡ logitech pointer                              id=16   [master pointer  (17)]
    ⎜   ↳ logitech XTEST pointer                    id=18   [slave  pointer  (16)]
    ⎣ logitech keyboard                             id=17   [master keyboard (16)]
        ↳ logitech XTEST keyboard                   id=19   [slave  keyboard (17)]      
    


    Теперь можно различить две группы устройств ввода. «Virtual core» и «logitech», однако мы видим что устройство logitech до сих пор входит в группу Virtual core. Исправим ситуацию — присоединим устройстов с ID=10 (Logitech) к группе с ID=16 (logitech)
    xinput reattach 10 16
    


    Теперь мышь от Logitech управляет ранее неподвижным курсором.

    Создадим еще одну группу и присоединим к ней наш тачпад:

                                                                  
    max 23:30:30   ~  $ xinput create-master touchpad
    max 23:32:35   ~  $ xinput list                                                                                                                                                                           
    ⎡ Virtual core pointer                          id=2    [master pointer  (3)]                                                                                                                             
    ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    ⎜   ↳ Logitech USB Receiver                     id=11   [slave  pointer  (2)]
    ⎜   ↳ Genius 2.4G Wireless Mouse                id=12   [slave  pointer  (2)]
    ⎜   ↳ SynPS/2 Synaptics TouchPad                id=14   [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)]
        ↳ Sleep Button                              id=8    [slave  keyboard (3)]
        ↳ Villem                                    id=9    [slave  keyboard (3)]
        ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]
        ↳ HP WMI hotkeys                            id=15   [slave  keyboard (3)]
    ⎡ logitech pointer                              id=16   [master pointer  (17)]
    ⎜   ↳ Logitech USB Receiver                     id=10   [slave  pointer  (16)]
    ⎜   ↳ logitech XTEST pointer                    id=18   [slave  pointer  (16)]
    ⎣ logitech keyboard                             id=17   [master keyboard (16)]
        ↳ logitech XTEST keyboard                   id=19   [slave  keyboard (17)]
    ⎡ touchpad pointer                              id=20   [master pointer  (21)]
    ⎜   ↳ touchpad XTEST pointer                    id=22   [slave  pointer  (20)]
    ⎣ touchpad keyboard                             id=21   [master keyboard (20)]
        ↳ touchpad XTEST keyboard                   id=23   [slave  keyboard (21)]
    max 23:32:39   ~  $ xinput reattach 14 20
    max 23:32:53   ~  $ 
    


    После этого мы видим три указателя мыши и управляем каждым с отдельного устройства!

    Чем это может быть полезно — пока не придумал. Just for fun — посмотреть в изумленные глаза Windows-пользователя и с гордостью сказать:
    Смотри, как я могу!
    
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 93
    • НЛО прилетело и опубликовало эту надпись здесь
      • +8
        Я с четырьмя игрался как-то: https://vk.com/video24414915_161796172
        • +2
          Музыка ну очень в тему, я бы сказал можно сделать из этого неплохой такой клип под эту композицию.
          • 0
            Интересно сколько у вас будет просмотров и лайков под видео :) Обалденное вышло это самое видео, должен признаться.
            • 0
              Я там одной рукой телефон держал, а второй мышь дергал, камера уплыла, но всё равно спасибо)
              • +2
                Пользуйтесь gtk-recordmydesktop.
                Или чем-то подобным.
                • 0
                  Это было давно, когда я о них не знал, сейчас пользуюсь Kazam
                  • +3
                    ffmpeg — просто и понятно:
                    alias recdesktop='ffmpeg -f x11grab -s 1920x1080 -r 8 -i :0.0 -sameq '
                    …
                    
                    recdesktop film.mkv
                    
              • +4
                На мух похоже.
                • +1
                  что за музыка?
                  • +1
                    Priestess – I Am The Night, Colour Me Black
              • +9
                Мега полезный хак для системы с несколькими мониторами (диспетчерская).
                • +2
                  Но активным всё-равно может быть только одно окно, так что пользы не много.
                  • +3
                    Ниже отписался по поводу варианта для Windows, а активных окон может быть сколько угодно — если Вы напишите соответствующий шелл. Вот пример идейного расширения данной технологии. Несколько компьютеров, виртуальный рабочий стол и много пользователей. Причём каждый со своей мышкой «лазит» по «чужим» рабочим столам.
                    • 0
                      А вот это действительно крутяк
                    • +2
                      Ну зато у каждого оператора своя клава/мышь. И тыкают по очереди со своего места, а не сгоняют друг друга со стула :)
                      • +3
                        Для этого можно запустить несколько экземпляров иксов.
                        • 0
                          Можно, я говорил об описанной в статье ситуации.
                        • 0
                          Но активным всё-равно может быть только одно окно, так что пользы не много.

                          Можно написать игру типа Дьяблы на двоих на одном компе)
                          • 0
                            Лучше какой-нибудь эмулятор танка с нескольких мышей (башня, движение, ещё что-нибудь).
                            Или ещё как аналог диаблы — один управляет движением, другой кастом скиллов.
                            • 0
                              World of Warships? =) Там как раз куча башен на одном корабле
                              • 0
                                Четыре человека на линейный варшип… заманчиво, но интересно только в жёсткой сече, в остальное время — так себе… Тут нужно что-нибудь фентезийное / научно-фантастическое. Например гномий хирд / стыкующийся модульный космический варшип, который может соединяться из нескольких игроков с объединением части защитных механизмов и индивидуальным вооружением (и управлением оным)… но вот как двигаться… видимо кто-то будет «мастер-кораблём»
                                • 0
                                  Модифицированный FTL где каждый управляет отдельным членом экипажа, а за важные вопросы отвечает капитан!
                                  • 0
                                    Спасибо… погляжу, вроде интересная штука…
                                    Но всё-таки FTL заточен на одного игрока… а тут хотелось бы что-то похожее на существующие ММО — каждый игрок имеет модуль, облаюащий специализацией (например: рубка управления, стрелок, силовые щиты, док-ремонтных роботов, ...). Ну и вместо обычной толпы в пати будут собираться в единый корабль… впрочем, теоретически можно и несколько кораблей собирать в пати. Вот только как быть с рубкой управления… ведь по идее на корабле она должна быть одна (максимум две) и управлять в целом движением корабля самостоятельно…
                                  • 0
                                    тут возникает возможность для внесения в игру сложных элементов пилотажа ))
                                    Не только стрелки решают исход боя ))
                          • +1
                            «Змей Горыныч»

                            linux.yaroslavl.ru/docs/conf/zg/node1.html

                            «Проект <<Змей Горыныч>>, реализованный в Московском государственном индустриальном университете, позволяет на базе одного системного блока без использования каких-либо нестандартных комплектующих организовать три полноценных рабочих места. Наличие трех <<голов>> (мониторов) объясняет название проекта. „
                            • +1
                              ???
                              Это же элементарщина! Запускаем три копии иксов — вуаля!
                              Единственное, где придется попотеть — это в составлении правила udev для однозначной идентификации клавиатур и мышей.
                              • 0
                                Одно «но»: Змей Горыныч появился за многие годы до этого вашего udev, многоловых видеокарт и даже раньше массового распространения USB мышей и клавиатур. Примерно в 2000 году он уже использовался в учебном классе.
                                linux.yaroslavl.ru/docs/conf/zg/node2.html
                                • 0
                                  Да, посмотрел схему по ссылке. Действительно, тогда приходилось выкручиваться более извращенными способами. Пришлось бы пару-тройку дней посидеть, да покумекать, как все реализовать.
                                  • 0
                                    Рад за вашу продвинутость. У обычных людей в то время пара-тройка дней уходила просто на установку и настройку Линукса — с несколькими перекомпиляциями ядра, разыскиванием и компиляцией из тарболов жизненно важных программ могло быть и подольше. А кумекать приходилось по скудным ресурсам, сидя долгими ночами на 56К модеме.

                                    Но, в общем, мой комментарий был не об этом, а о том, что идея использовать один PC на несколько пользователей очень старая и проверенная, странно, что о ней так мало людей знает.
                                    • 0
                                      > странно, что о ней так мало людей знает
                                      Потому что линуксом все-таки не так уж и много людей пользуется.
                          • +1
                            В Windows такое тоже возможно, и уже весьма давно. Ставятся специальные дрова и курсоры мышей начинают имитировать прикосновения. Вот видео, для разъяснения технологии.
                            Возможности использования есть в том же видео — разрабатывать ПО для мультитач дисплеев, к примеру.
                            Так что удивленные глаза должны делать Вы, наверное.
                            • 0
                              Да, действительно удивлен. Дрова для курсора мыши — это действительно сильно :)

                              Если серьезно — реально удивлен, ибо не знал. Огромный плюс, что такие дрова могут имитировать прикосновения.

                              Но поверьте моему (хоть и скромному) опыту. Разрабатывать для тач-экранов, реально не имея такового — очень неэффективно!
                              • +1
                                Ну, когда-то уже был Surface, а мультитач экранов ещё не было в продаже — выкручивались как могли…
                                • +1
                                  Я разрабатывал для одно-касательных экранов на звуковой технологии — такие часто применяются в платежных терминалах.
                                  Тач там достаточно тупой, но когда (после месяца разработки) у меня появился такой экран — стало понятно, что процедуры обработки MouseMove нужно переделывать по «подтупливание» этого сенсора.
                              • 0
                                Хм интересно, получается можно попробовать провернуть такую хитрость — если у меня подключен ipad как второй монитор (через air display) на win7 — его тач работает как основной курсор (перемещая его на «второй монитор»)

                                Провернув такой трюк и разделив основной курсор мыши и тач планшета на два независимых курсора можно сделать довольно удобную систему (например для работы с фото в lightroom)

                                Пробовал кто-то что-то подобноее?
                                • 0
                                  Интересно, оно под win8 заведётся?
                                • +1
                                  Кстати о системе с несколькими мониторами — я не подумал, действительно полезно!
                                  Жаль нельзя ограничить пространство курсора одним монитором, хотя… наверное нужно просто глубже копнуть.
                                  • 0
                                    первое что приходит на ум — каждому монитору — свою сессию, при необходимости перекинуть окно — сделать простой скрипт с ssh-X11 форвардингом, который закрепить на «области» экрана.
                                    • 0
                                      В протоколе Xinput 2.3 предусмотрены ограничения курсоров.

                                      who-t.blogspot.com/2012/12/whats-new-in-xi-23-pointer-barrier.html
                                    • +1
                                      Интересно, но странный эффект, если один из курсоров меняет своё изображение, например, при наведении на ссылку, то и другой курсор так же меняет изображение, хоть он и не над ссылкой.
                                      • 0
                                        Тоже заметил, но только тогда, когда наигрался и начал отвечать на комменты на хабре :) Надо думать — как от этого избавиться
                                        • +1
                                          Еще вторичный курсор теряет связь с клавишами.

                                          К примеру, можно изменять позицию окна используя alt + ЛКМ и драг. Virtual Core работает правильно, Logitech уже не хочет это делать.
                                      • –19
                                        У вас есть буханка хлеба? У меня есть для вас еще одна идея, что можно сделать.
                                        • 0
                                          Не пробовали работать устройствами одновременно с правой и левой руки?
                                          • +1
                                            Конечно пробовал. Это удобно только тогда, когда два окна открыто — каждое на пол-экрана и нужно делать что-то в обоих.
                                            одновременно, конечно тыкать в оба окна не получается :)

                                            В одном окне с двумя указателями с разных рук — только путаница. Игрушка — не более того.

                                            Xorg воспринимает несколько указателей — как «One Input Point»
                                            • +1
                                              после вашего вопроса мне вспомнилось перво-апрельское видео от гугла, где можно было двумя мышками управлять браузером. Помните?
                                              • 0
                                                Кстати вышеприведенная ссылка два курсора как раз и не осиливает
                                                • 0
                                                  ну говорю же, это перво-апрельское видео. Откройте его в Ютубе, и посмотрите дату аплоада :)

                                                  upd: а по ссылке, что я привел выше — там со временем на страничке появляются новые курсоры. Вы нажмите кнопку посередине и увидите сами.
                                            • +1
                                              Вспоминается анекдот про черные ящики в автомобилях и последние слова перед аварией — "… у 90% русских — «Приколись, братва, как я могу!..»

                                              :)
                                              • +5
                                                Скорее про секретаршу, которая хотела подключить вторую мышь, чтобы в пасьянсе, приподняв одну карту, подглядеть другую под ней
                                              • 0
                                                Жаль что не четырех рукий мутант ))
                                                • 0
                                                  Очень удобно для тех, кто рисуют на планшете левой рукой, а мышку держат правой. Например, в MyPaint очень удобно держать курсор мыши над палитрой, а курсор пера над холстом. Эх, если бы только работало одновременное нажатие! Мечты, мечты…
                                                  • +1
                                                    А как поменять местами кнопки для левой руки?
                                                    • 0
                                                      xinput set-button-map 12 3 2 1
                                                    • +14
                                                      Эммм, а как вернуть 1 курсор?

                                                      Сижу, пялюсь на 2 курсора, что делать со вторым, не знаю…
                                                      • +5
                                                        Понял

                                                        xinput remove-master IDгруппы
                                                        • +1
                                                          Спрячьте его в угол, а мышку — в ящик стола.
                                                          • +1
                                                            Тяжело будет спрятать тачпад ноута в ящик.
                                                            Учитывая что основной всегда идет мышь.
                                                        • 0
                                                          свисток два раза вероятно от того, что поддерживать как мышь так и клавиатуру
                                                          • 0
                                                            А почему тогда он в Pointer?
                                                          • 0
                                                            Но фокус ввода один остаётся. Какой смысл?
                                                            • 0
                                                              Не все типы интерфейсов подразумевают ввод с клавиатуры. Подобный подход скорее имеет смысл на нефокусируемых элементах управления
                                                            • +1
                                                              Эх… Мне почему-то сразу вспомнился режим игры за одним компьютером в Settlers 2)
                                                              • 0
                                                                В MacOS тоже есть эта команда. Надо опробовать :)
                                                                • +2
                                                                  XInput2 — штука хорошая. Правда для полного счастья нужно применять WM с поддержкой множественного фокуса, ибо в KWin это выглядит странно.

                                                                  Я это использовал вот для чего:
                                                                  Подключал к компу три клавиатуры и три мыши, спаривал клавиатуры и мыши в пары.
                                                                  Написал для Wine патч в несколько строк, чтобы тот использовал пару клава+мышь, используя переменную окружения WINE_PTR_ID.
                                                                  А далее дело техники — запускаем несколько копий Counter-Strike в Wine в оконном режиме, каждой копии передаём свой WINE_PTR_ID, с помощью KWin убираем рамки окон, с помощью wmctrl располагаем окна «мозаикой» на 42" телеке, и можно играть втроём на одной машине.
                                                                  Ну это в теории, а на практике это было не особо юзабельно, ибо курсор «выпрыгивал» из окна, если резко дёрнуть мышью, и уползал к соседу. С этим я уже бороться не стал.
                                                                  • 0
                                                                    В настройках Wine ставить «разрешить приложению удерживать курсор в окне» не пробовали ставить?
                                                                    • 0
                                                                      Пробовал, конечно же, но почему-то не помогало, в причинах разбираться уже не стал.
                                                                  • 0
                                                                    Все новое — это хорошо забытое старое:
                                                                    www.youtube.com/watch?v=kek-wPmfWbQ
                                                                    • +1
                                                                      В игрушке Hammerfight можно использовать несколько мышек. По мышке на игрока.

                                                                      Я придумал полезное применение нескольким курсорам: Можно вдвоём гулять по сайтам с одного компьютера с парой мониторов. Википедию листать, к примеру.
                                                                      • 0
                                                                        Как уже отметили выше, может быть только 1 активное окно. Так что вряд ли…
                                                                        Остаются только игры на двоих, но они должны быть заточены.
                                                                        • 0
                                                                          Сериус сем хот сит, всегда была мечта иметь вторую мышь)) Т.к. второму игроку приходилось управлять взглядом с клавы.
                                                                          • 0
                                                                            Именно это я и предусматриваю.
                                                                            В своём примере я имел в виду просто периодическое щёлканье по ссылкам. Два браузера, каждый на своём мониторе, два пользователя--каждый со своим курсором, браузером и монитором. Такое будет работать и в Окошках.
                                                                          • 0
                                                                            В линуксовой версии World of Goo тоже. Во всяком случае так в конфиге написано, но у меня ничего не вышло :(
                                                                          • +1
                                                                            synergy к сожалению при переходе на монитор другой машины затирает второй курсор и полностью передает управление первому (тот который перешел на другую машину), а второй (который остался на своей и исчез) вообще никак не реагирует ((

                                                                            мот кто знает можно ли это решить?
                                                                            • 0
                                                                              вопрос снят, уже нашел, нельзя (
                                                                            • 0
                                                                              Помню как в 2010 баловался. Правда не помню почему тогда на хабаре не опубликовал.
                                                                              Кстати, тогда так и не решен был вопрос, как использовать несколько клавиатур — одну как обычную, а вторую под какую-нибудь хитрую раскладку, навроде клингонской или квенья :)
                                                                              • 0
                                                                                Смотрю на свои две клавиатуры и думаю…

                                                                                PS самый простой способ, конечно — что-нибудь нахардварить(DIY) и драйвер пришить… а вот как заставить их работать независимо… может кто игрался с этим?
                                                                                • 0
                                                                                  Когда раскладки в xorg.conf были прописаны — то можно было наверно там подшаманить. Другое дело, что нынче переключение раскладок как-то хитрее организовано, а я не заморчивался как именно.
                                                                                  • 0
                                                                                    Когда подключал себе вторую клавиатуру — обнаружил интересную фичу/баг — на второй клавиатуре был другой сет раскладок (дефолтный). Как заюзать это — тогда не заинтересовался, а вот мозги оно вывернуло наизнанку, пока понял, что происходит ))
                                                                                • 0
                                                                                  Мсье знает толк в извращениях)
                                                                                  • 0
                                                                                    Зря ты так. В том же GIMPе, наверно, удобно будет: одна рука тыкает по кнопкам инструментов, а другая в графическом окне редактирует рисунок. Я думаю, так будет удобнее, чем каждый раз через весь экран курсором к кнопкам ездить.
                                                                                    • 0
                                                                                      А еще удобнее переключать инструменты хоткеями.
                                                                                      • 0
                                                                                        Цвет в палитре и параметры кисти хоткеями не выбрать. В перьях есть кнопки переключения цвета, но всё равно приходится постоянно в палитру лезть.
                                                                                  • 0
                                                                                    в виндах www.microsoft.com/multipoint/mouse-sdk/
                                                                                    продвигают для школ и универов.
                                                                                    • +1
                                                                                      >>>Не знаю зачем мне это пригодится, но очень вдруг захотелось иметь два указателя мыши

                                                                                      Постановка задачи классная :)
                                                                                      • 0
                                                                                        Прочтение таких приколов с иксами сподвигло к прочтению man'ов к xinput и xset. Нашёл что-то новое для себя. Заодно вспомнил про такую приятную вещь, как unclutter.
                                                                                        • +1
                                                                                          У Asus есть ультрабук Taichi с 2мя экранам — вот там может быть полезно одним управлять с тачпэда, а на втором — bluetooth мышкой.
                                                                                          • 0
                                                                                            Курсор «появился», но отрисовывается только основной. Второй же мелькает только когда какая-то анимация есть или мышь двигается. Что может быть, как лечить?
                                                                                            • 0
                                                                                              проверьте xinput list — убедитесь, что мышь, которая должна управлять «замершим курсором» в нужной группе, если нет — выполните еще раз reattach
                                                                                              • 0
                                                                                                Не, сам курсор двигается и действует. Просто он пропадает сразу как перестаёт перемещаться или анимироваться.
                                                                                                • 0
                                                                                                  С этим я не парился — вообще-то я думал это настройки моей системы
                                                                                            • 0
                                                                                              Круто. Всегда хотел такое. Однажды, когда USB ещё было далеко не у всех, а были в основном COM (причём некоторые 25-пиновые) и PS/2 помню, как-то подключил две полудохлых мыши (нашедшиеся в коробке с неисправными мышами): одна перемещала курсор только по вертикали, другая только по горизонтали. С тех пор иногда подключаю прикола ради две мышки, одну кладу слева, одну справа, работаю одновременно обеими и наблюдаю за наблюдающими (и их реакцией когда я «как ни в чём не бывало» предлагаю им сесть на моё место и что-то сделать).

                                                                                              В качестве логического продолжения было бы интересно сделать из этого полноценный мультитач…

                                                                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.