Управление несколькими указателями с помощью Xlib или xinput в Ubuntu/Linux

Я создаю систему, которая использует несколько курсоров (указателей) в нескольких сеансах xsessions. В моем компьютере установлено несколько видеокарт для управления разными мониторами. Я хочу иметь разные курсоры на каждом экране и управлять каждым из них. Каждый монитор — это отдельная сессия.

Я начал использовать библиотеку xlib в C для управления одним курсором, который у меня есть, с помощью следующей команды:

XWarpPointer(display,None,window,0,0,0,0,x,y);

Это отлично работает для одного курсора. Затем я создал второй курсор, используя xinput в терминале:

>>xinput create-master second

и тогда у меня есть два курсора на экране. Я могу пойти и управлять каждой отдельной мышью, используя команду reattach:

>>xinput reattach MOUSEID POINTERID

Последний шаг — управлять каждым курсором отдельно с помощью xlib. Когда я использую команду xWarpPointer, она просто перемещает исходный курсор, и я не могу найти способ указать, каким курсором управлять. Я также не смог найти способ установить указатель по умолчанию. Вы можете увидеть список всех указателей, используя «xinput list» в терминале. Кто-нибудь знает, как я могу

Спасибо за помощь!


person amustafa    schedule 05.12.2012    source источник


Ответы (1)


Вам нужно использовать запрос XIWarpPointer из расширения XInput2, он принимает идентификатор устройства в качестве параметра

Bool     XIWarpPointer(
        Display*            display,
        int                 deviceid,
        Window              src_win,
        Window              dst_win,
        double              src_x,
        double              src_y,
        unsigned int        src_width,
        unsigned int        src_height,
        double              dst_x,
        double              dst_y
    );
person Andrey Sidorov    schedule 05.12.2012
comment
Спасибо! Это работает отлично. Теперь есть еще одна проблема. Когда я перемещаю курсор на нужный xsession, он не обновляет фоновое изображение. Я заканчиваю тем, что весь экран стал белым. Вот долго к новой теме. stackoverflow.com/ вопросы/13733239/ - person amustafa; 06.12.2012