Пользователь
0,0
рейтинг
10 января 2013 в 23:42

Администрирование → 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-пользователя и с гордостью сказать:
Смотри, как я могу!
Maxim Antonov @maxidler
карма
39,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (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 помню, как-то подключил две полудохлых мыши (нашедшиеся в коробке с неисправными мышами): одна перемещала курсор только по вертикали, другая только по горизонтали. С тех пор иногда подключаю прикола ради две мышки, одну кладу слева, одну справа, работаю одновременно обеими и наблюдаю за наблюдающими (и их реакцией когда я «как ни в чём не бывало» предлагаю им сесть на моё место и что-то сделать).

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

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