gpm – утилита для копирования и вставки и сервер мыши для виртуальных консолей
СИНТАКСИС
gpm [ параметры ]
ОПИСАНИЕ
Этот пакет предназначен для работы в качестве полезного сервера мыши для приложений, работающих в консоли Linux. Он основан на пакете «selection», и часть его кода взята из самого пакета «selection». Этот пакет предназначен для замены «selection» в качестве механизма копирования и вставки; он также предоставляет дополнительные возможности. Пакет «selection» предложил первую реализацию копирования и вставки для Linux с использованием двух кнопок мыши, и буфер обмена по-прежнему называется «буфером выбора» или просто «выбором» во всем этом документе. Ниже приведена информация, извлеченная из файла texinfo, который является предпочтительным источником информации.
Исполняемый файл `gpm` предназначен для работы в качестве демона (следовательно, `gpmd` было бы лучшим именем для него).
В этом разделе описываются параметры командной строки для gpm, а его внутренняя работа описана в следующем разделе.
Из-за ограничений в системном вызове `ioctl(TIOCLINUX)`, `gpm` должен выполняться пользователем root.
Эти ограничения были добавлены в последних ядрах версии 1.1 для устранения уязвимости в системе безопасности, связанной с «selection» и созданием дампов экрана.
Сервер можно настроить в соответствии с предпочтениями пользователя, и любое приложение, использующее мышь, унаследует настройки сервера. Начиная с версии 1.02 и заканчивая версией 1.19.2, любой пользователь, вошедший в систему через консоль, мог изменять настройки мыши с помощью параметра `-q`. Теперь это невозможно по соображениям безопасности.
Начиная с версии 0.97, программа сервера запускается в фоновом режиме. Чтобы остановить `gpm`, можно просто повторно вызвать его с переключателем командной строки `-k`, хотя `killall gpm` может быть лучшим вариантом.
СПЕЦИАЛЬНЫЕ КОМАНДЫ
В версии 1.10 добавлена возможность выполнения специальных команд при определенных обстоятельствах. По умолчанию специальные команды предназначены для перезагрузки и остановки системы, но пользователь может указать свои собственные. Возможность вызова команд с помощью мыши – это полезная функция для программистов, поскольку она позволяет выполнить чистую остановку системы, когда клавиатура заблокирована и нет сетевого подключения для восстановления системы в нормальное состояние.
Специальные команды активируются троекратным щелчком левой и правой кнопками мыши – это маловероятное событие во время нормального использования мыши. Самый простой способ троекратного щелчка – это удерживать одну из кнопок и троекратно щелкать другую. Когда обработка специальных команд активирована, на консоли появляется сообщение (и динамик издает два звуковых сигнала, если у вас есть динамик); если пользователь отпускает все кнопки и снова нажимает одну из них в течение трех секунд, то выполняется специальная команда, соответствующая нажатой кнопке.
Специальные команды по умолчанию:
левая кнопка
Перезагружает систему, посылая сигнал процессу init.
средняя кнопка (при наличии)
Выполняет команду /sbin/shutdown -h now.
правая кнопка
Выполняет команду /sbin/shutdown -r now.
Флаг -S включает обработку специальных команд и позволяет изменить три
специальные команды. Чтобы принять команды по умолчанию, используйте -S "" (т. е. укажите пустой аргумент).
Чтобы указать свои собственные команды, используйте список, разделенный двоеточиями, чтобы указать команды, связанные с
левой, средней и правой кнопками. Если какая-либо из команд пуста, она интерпретируется как «отправить сигнал процессу init». Эта конкретная операция поддерживается в дополнение к выполнению внешних команд, потому что иногда серьезные ошибки приводят к тому, что система не может создать новый процесс; в этих
редких случаях программист должен иметь возможность отключить систему в любом случае, и убийство init из работающего процесса — единственный способ сделать это.
В качестве примера, -S ":telinit 1:/sbin/halt' связывает убийство init с левой кнопкой, переход в однопользовательский режим — со средней кнопкой и отключение системы — с правой кнопкой.
Системные администраторы должны быть осторожны со специальными командами, так как gpm работает с правами суперпользователя. Специальные команды лучше всего подходят для компьютеров, к мыши которых можно получить физический доступ только доверенным лицам.
ПАРАМЕТРЫ КОМАНДНОЙ СТРОКИ
Доступные параметры командной строки следующие:
-a accel
Устанавливает значение ускорения, используемое, когда длина одного события движения превышает значение delta (см.
^ d).
-A[limit]
Запускает систему с отключенной функцией вставки выделенного текста. Это предназначено в качестве меры безопасности; один из возможных способов атаки на систему — поместить вредоносную команду оболочки в буфер выделения (rm -rf /), включая завершающий символ новой строки, а затем пользователю нужно только щелкнуть средней кнопкой мыши. Начиная с версии 1.17.2, это превратилось в более
общий механизм «старения»; демон gpm может автоматически отключать (старить) вставку выделенного текста после периода неактивности. Чтобы включить этот режим, просто укажите необязательный параметр limit
(без пробелов между ними!), который интерпретируется как время в секундах, в течение которого выделенный текст
считается допустимым и может быть вставлен. Начиная с версии 1.15.7, предоставляется тривиальная программа под названием disable-paste. Следующее можно добавить в /etc/profile, если вы разрешаете нескольким пользователям работать в вашей консоли.
`case $( /usr/bin/tty ) in
/dev/tty[0-9]*) /usr/bin/disable-paste ;;
esac'
-b baud
Устанавливает скорость передачи.
-B sequence
Устанавливает последовательность кнопок. 123 — это нормальная последовательность, 321 можно использовать для левшей, а 132 может быть полезен с двухкнопочными мышами (особенно в Emacs). Допустимы все перестановки кнопок.
-d delta
Устанавливает значение delta. Когда длина одного события движения превышает значение delta, accel используется в качестве множителя. (Должно быть 2 или больше).
-D Не переходить автоматически в фоновый режим при запуске и выводить сообщения в стандартный поток ошибок, а не в syslog. Это полезно для отладки; в предыдущих версиях это делалось с помощью опции времени компиляции.
-g number
Для устройств glidepoint эмулировать указанную кнопку при касании. number должно быть равно `1`, `2` или `3` и относится к номеру кнопки до выполнения переназначения кнопок с помощью `-B`. Эта опция применяется к декодированию mman и ps2. По умолчанию эмуляция кнопки не выполняется, потому что касание ps2 несовместимо с некоторыми обычными мышами ps2.
-h Вывести сводку командных опций.
-i interval
Установить интервал, который будет использоваться в качестве верхнего предела времени для многократных щелчков. Если интервал между событиями отпускания и нажатия кнопки меньше предела, нажатие считается двойным или тройным щелчком. Время указывается в миллисекундах.
-k Завершить работу запущенного gpm. Это можно использовать пользователям busmouse для завершения работы gpm перед запуском X (если они не используют `-R` или ограничение на одно открытое соединение удалено из ядра).
-l charset
Выбрать таблицу поиска `inword()`. Аргумент charset — это список символов. `-' используется для указания диапазона, а `\` используется для экранирования следующего символа или для предоставления восьмеричных кодов. В charset могут быть только видимые символы, потому что символы управления не могут отображаться в видеопамяти текстового режима, откуда производится выбор.
-m filename
Указать файл мыши, который нужно открыть. Должен быть указан до опций `-t` и `-o`.
-M Включить многорежимный режим. Демон будет читать два разных устройства мыши. Любая последующая опция будет относиться ко второму устройству, а любая предшествующая опция будет использоваться для первого устройства. Эта опция автоматически принудительно включает опцию повторителя (`-R`).
-o list-of-extra-options
Эта опция работает аналогично опции `mount -o`; она используется для указания списка «дополнительных опций», которые относятся к каждому типу мыши. Список разделяется запятыми. Опции `dtr`, `rts` или `both` используются для инициализации последовательного порта для переключения линий модема, что совместимо с более ранними версиями gpm; однако использование `-o dtr` с типами мышей, отличными от обычных последовательных, теперь может вызывать ошибку. И, кстати, используйте `-o` после `-m` и после `-t`.
-p Принудительно отображать указатель во время выбора. Это поведение `selection-1.7`, но иногда это может сбивать с толку. По умолчанию указатель не отображается, что тоже может сбивать с толку.
-r number
Установить отзывчивость в процентах от движения (от 1 до 100, по умолчанию 10). Меньшее число может быть использовано для замедления движения курсора, но это нельзя использовать для ускорения движения мыши, см. `-a`.
-R[name]
Заставляет `gpm` действовать как повторитель: любые данные мыши, полученные в графическом режиме, будут передаваться в fifo `/dev/gpmdata` в указанном протоколе, который указывается в необязательном аргументе (без пробела!). В принципе, можно использовать те же имена, что и для опции `-t`, хотя повторение в некоторые протоколы может быть реализовано не сразу. Кроме того, можно указать `raw` в качестве имени, чтобы повторять данные мыши побайтово, без какой-либо трансляции протокола. Если имя не указано, по умолчанию используется `msc`. При использовании gpm в режиме повторителя можно настроить X-сервер для использования его fifo в качестве устройства мыши. Эта опция полезна для владельцев bus-mouse, чтобы обойти ограничение на одно открытое соединение. Это также простой способ управления этими глупыми мышами с двойным режимом, которые заставляют вас удерживать среднюю кнопку при смене видеорежима. Эта опция принудительно включается опцией `-M`.
-s number
Установите частоту дискретизации для устройства мыши.
-S commands
Включите обработку специальных команд и, при необходимости, укажите пользовательские команды в виде списка, разделенного двоеточиями. Подробное описание специальных команд приведено выше.
-t name
Установите тип мыши. Используйте -t help, чтобы получить список допустимых типов. Используйте -t после выбора устройства мыши с помощью -m.
-v Выведите информацию о версии и завершите работу.
-2 Принудительно установите два режима работы кнопок. Это означает, что средняя кнопка, если она есть, будет использоваться как правая.
-3 Принудительно установите три режима работы кнопок. По умолчанию мышь считается двухкнопочной, пока не будет нажата средняя кнопка. Если есть три кнопки, правая кнопка используется для расширения выделения, а средняя кнопка используется для вставки. Внимание: если вы используете опцию `-3` с двухкнопочной мышью, вы не сможете вставить выделенный текст.
РАБОТА
Чтобы выделить текст, нажмите левую кнопку мыши и перетащите мышь. Чтобы вставить текст в той же или другой консоли, нажмите среднюю кнопку. Правая кнопка используется для расширения выделения, как в xterm.
Мыши с двумя кнопками используют правую кнопку для вставки текста.
Двойной и тройной щелчок выделяют целое слово и целую строку соответственно. Для лучшей визуальной обратной связи рекомендуется использовать опцию -p.
Если после содержимого строки есть завершающий пробел и на остальной части строки нет другого текста, остальная часть строки будет автоматически выбрана. Если выбрано несколько строк, завершающие пробелы на каждой строке будут удалены из буфера выделения.
Любой вывод на виртуальной консоли, содержащей выделенный фрагмент, удалит выделенный фрагмент с экрана, чтобы сохранить целостность отображения, хотя содержимое буфера вставки останется неизменным.
Механизм выделения отключается, если управляющая виртуальная консоль переходит в графический режим, например, при запуске X11, и снова включается при возврате в текстовый режим. (Но см. раздел «ОШИБКИ» ниже).
ОШИБКИ
Сервер gpm может иметь проблемы при взаимодействии с X: если ваша мышь является одноканальным устройством (т. е. шинной мышью), вам следует завершить работу gpm перед запуском X или использовать опцию -R (см. выше). Чтобы завершить работу gpm, просто вызовите gpm -k. Эта проблема не относится к последовательным мышам.
Нельзя запускать два экземпляра gpm в одной системе. Если у вас две мыши, используйте опцию -M (см. выше).
Пока текущая консоль находится в графическом режиме, gpm переходит в спящий режим, пока не вернется в текстовый режим (если не используется -R). Таким образом, он не будет отвечать клиентам. В любом случае, маловероятно, что клиенты, активно использующие мышь, появятся в скрытых консолях.
Клиенты, поставляемые вместе с gpm, не обновляются, поэтому при их использовании могут возникнуть потенциальные риски для безопасности.
АВТОРЫ
Эндрю Хейлетт <_> (оригинальный код выбора) Иан Циммерман <_> (предыдущий сопровождающий) Алессандро Рубини <_> (предыдущий сопровождающий (все еще оказывает большую помощь)) Нико Шоттелиус <_> (текущий сопровождающий)
Многие другие участники, внесшие вклад как в код выбора, так и в gpm.
СОПРОВОЖДАЮЩИЕ
Текущий сопровождающий — Нико Шоттелиус. Но без помощи Алессандро Рубини и рассылки было бы невозможно поддерживать gpm. Список рассылки можно найти по адресу _. Дополнительная информация о списке содержится в файле README, входящем в состав исходного дистрибутива gpm.
ФАЙЛЫ
/var/run/gpm.pid PID работающего gpm
/dev/gpmctl Управляющий сокет для клиентов
/dev/gpmdata FIFO-канал, в который записывает демон-ретранслятор (`-R`).
СМОТРИТЕ ТАКЖЕ
gpm-types(7) Описание текущих типов указателей, поддерживаемых gpm
Файл info о gpm, который содержит более полную информацию и объясняет, как написать клиент gpm.