Вот некоторые идеи, позволяющие сделать курсор более заметным, при помощи простых программ.
Когда нажимается какая-нибудь клавиша, вывести на пол-секунды что-нибудь (большой курсор или маленькое окно) на месте курсора.
Использовать XRecolorCursor для смены цвета курсора каждую 0.1 секунды.
Более ожидаемое решение - это мышиный хвост а-ля windows, т.е. при движении мыши, курсор рисуется на новом месте, а на старом месте стирается только через некоторую задержку. Мышиный хвост лучше всего реализовать в X-сервере, но проще все его сделать как X-клиент, а еще лучше как прокси-сервер (см. "Технические рассуждения").
Если у вас установлен сервер шрифтов, то используйте команду fstobdf, идущую вместе с сервером.
Кроме того, вы можете попробовать команду getbdf, которая записывает любой установленный в X11 шрифт в bdf файл.
Следуйте шагам, описанным ниже. Если вы не хотите загружать и компилировать пакет bdfresize, вы можете пропустить первые три шага и найти увеличенный шрифт, вместо того, чтобы создавать его.
берем файл cursor.bdf (исходный текст шрифта "cursor") из какого-нибудь дистрибутива X, например ftp://ftp.x.org/pub/R6.3/xc/fonts/bdf/misc/cursor.bdf (если вы его там не найдете, попробуйте поискать его в сети или возьмите мою копию).
берем, компилируем и инсталлируем пакет bdfresize ftp://ftp.cs.titech.ac.jp/X11/contrib/Local/bdfresize-1.4.tar.Z
(или моя копия): zcat bdfresize-1.4.tar.Z | tar xf - cd bdfresize-1.4 xmkmf make
На Linux вы, наверно, должны сделать: make CCOPTIONS='-include /usr/include/bsd/bsd.h' clean all
создаем каталог и записываем в него увеличенный шрифт (например в два раза):
mkdir $HOME/fonts bdfresize -f 2 cursor.bdf | bdftopcf >$HOME/fonts/cursor2.pcf mkfontdir $HOME/fonts
Я подготовил несколько шрифтов
с увеличением в 1.5, 2, 2.5, 3, 4, 5, 6, 7, 8 и 16 раз. Если вы не хотите пользоваться bdfresize, можете найти их и поместить в каталог $HOME/fonts.
изменяем файлы .xinitrc или .xsession: перед тем как запустится X-клиент (который использует курсор), должны запускаться следующие команды:
xset +fp $HOME/fonts xsetroot -cursor_name X_cursor
перезапустите X-сервер.
Это все. Теперь все курсоры мыши должны быть в два раза больше.
Причиной написания этого мини-HOWTO послужила просьба моего однокурсника с плохим зрением, который спросил меня о том, как увеличить курсор мыши под X. После того, как я нашел способ это сделать, я написал первую версию данного документа. Информация об этом методе не является общей, но тем не менее я решился поместить его в Linux мини-HOWTO, даже несмотря на тот факт, что он совсем не специфичен для Linux. Как и другие мини-HOWTO, он находится в http://sunsite.unc.edu/LDP/HOWTO/.
Основная версия этого документа поддерживается в формате SGML/linuxdoc. Это позволяет автоматически получать версии в других форматах (которые можно найти там же): html, text, LaTeX, DVI, PostScript, GNU info.
Shinobu Miyata перевел этот текст на Японский http://i11www.ira.uka.de/~schneid/jp/X11-big-cursor/.
Сервер шрифтов - это сетевой сервис с простым протоколом, предоставляющий X11 набор шрифтов. Он предоставляет как список шрифтов, так и изображение.
Вы можете использовать сервер шрифтов для модифицированных шрифтов вместо того, чтобы хранить их у себя на компьютере.
Этот способ особенно удобен, если несколько машин не используют общую файловую системы или если вы пользуетесь X-терминалами.
Сам сервер шрифтов и утилиты, связанные с ним, идут с дистрибутивом X11R5+ (AFAIK).
Прочитайте руководства fs(1), fslsfonts(1) (или xfs(1), xfslsfonts(1) и попробуйте - это не сложно. Скажем, если вы запустили сервер шрифтов на машине some.host.edu
на порту 7100. Вы можете проверить, как он работает командой
fslsfonts -server some.host.edu:7100
И настроить X-сервер командой
xset +fp tcp/some.host.edu:7100,
которая должна выполниться без ошибок.
Возможно ли написать программу, автоматически увеличивающую указатели?
Решение 1 (частичное)
Использовать XTestCompareCursor из XTEST. Для всех окон, над которыми движется указатель мыши курсор окна сравнивается с набором "известных" курсоров (например, из шрифта cursor). Если найден похожий курсор, то он заменяется на увеличенную версию. В противном случае, он остается без изменения или подставляется стандартный курсор. Это работает в том случае, если у вас есть XTest.
Решение 2
Написать X-прокси-сервер, передающий все запросы на X-сервер, за исключением запросов соответствующих функции XCreate*Cursor из библиотеки Xlib. Курсоры, определенные в запросах XCreate*Cursor должны изменяться на соответствующие увеличенные.
Прокси-сервер имитирует новый дисплей, например :1. Все клиенты, использующие этот дисплей (например xterm -display :1) показываются на обычном X-сервере :0), но их курсоры автоматически увеличиваются. Курсоры клиентов, использующих :0 не изменяются.
X-сервер может ограничивать максимальный размер курсора, особенно если курсор реализуется аппаратно. Другие X-сервера не имеют таких ограничению. Например, XF86_S3 3.3 работает с курсором 512x512 (правда очень медленно).
Увеличенный шрифт должен иметь то же название, что и оригинал. (имя шрифта должно быть cursor, имя файла не имеет значение); это не проблема, так как bdfresize не меняет имя шрифта.
В списке каталогов шрифтов каталог с новым шрифтом должен быть помешен выше каталога со стандартным шрифтом; это выполняет команда xset +fp (в отличие от xset fp+).
Любые изменения в каталоге $HOME/fonts/ вступают в силу после команд mkfontdir $HOME/fonts; xset fp rehash и перезапуска X-клиентов (а точнее, для вновь созданных курсоров).
xset +fp path может не работать на X-терминале, если он использует сервер шрифтов (см. раздел Сервер шрифтов) или другой способ управления шрифтами (это может исправить только ваш системный администратор).
Этот же способ можно использовать для olcursor и decw$cursor, и других шрифтов с курсорами мыши, которые вам могут встретиться.
Курсорные шрифты, созданные bdfresize, выглядят не очень гладкими, особенно при большом увеличении. Было бы не плохо, если бы кто-нибудь нарисовал свои крупные курсоры.
XDM - это утилита, отвечающая за приглашение ко входу в систему, и инициализирующая их X-сессию. Это может быть как локальная сессия (в случае с рабочей станцией X), так и удаленная сессия работы с сервером приложений (в случае бездискового или простого терминалов).
Существуют два метода, которые могут привести к выдаче приглашения ко входу в систему:
Запрос X-сервера
Через XDM-сервер
Связь между XDM и настоящим "X-сервером" (машиной с настоящим экраном/клавиатурой/мышкой/и т.п.) производятся при помощи протокола XDMCP ('X display manager control protocol').
Это позволяет X-серверу посылать запросы на XDM-сервер, обычно говоря ему что-то типа "Тут кто-то хочет войти в систему - дайте мне приглашение ко входу".
Эта функция может принять одну из 3 форм:
Прямой запрос: X-сервер связывается с заданной с машиной, посылая запрос на получение приглашения ко входу на его дисплей.
Широковещательный запрос: X-сервер посылает общее сообщение по сети, и первый сервер, на котором запущен XDM, отвечающий на это сообщение, предоставляет X-серверу приглашение ко входу в сеть.
Косвенный запрос: X-сервер связывается с заданной машиной, но спрашивает у нее, какие другие машины с xdm она знает. Эта машина предоставляет пользователю для выбора список машин, и после этого X-сервер устанавливает соединение с выбранной машиной. Приглашение ко входу передается X-серверу уже по этому новому соединению.
Существуют еще несколько форм, но они не будут описываться здесь. Для этого обращайтесь к документации по XDM и XDMCP, ссылки на которые приведены в Разд. Ссылки.
Если у вас есть несколько машин (бездисковых или простых X-терминалов) с X-серверами, работающих с одним сервером приложений, то для реализации процедуры входа в этот сервер можно использовать XDM. В этом случае XDM сам связывается с каждым X-сервером и автоматически выводит на дисплей приглашение ко входу в сервер приложений.
В этом режиме работы файл "Xservers" содержит список машин (включая и локальную, если это необходимо), с которыми XDM должен связаться для выдачи на их экран приглашения ко входу.
Эта конфигурация (если в списке X-серверов нет удаленных машин) очень часто используется на X-рабочих станциях для того, чтобы выдать на экран приглашение ко входу на локальную машину.
Подобный способ требует того, чтобы права доступа X-сервера позволяли XDM сервера приложений устанавливать обратную связь к соответствующему дисплею.
В этом документе описываются базовые принципы использования XDM (менеджер дисплея X) при его управлени X-терминалом и X-серверами, для реализации систем с "тонкими клиентами" при помощи Linux.
X (или 'Система X Window') - это одна из лучших оконных графических сред для Unix. Одно из главных ее преимуществ состоит в том, что работающие в ней приложения (обозреватель сети, текст-процессор и т.п.) и устройства ввода-вывода (графический экран, мышь, клавиатура и т.п) связаны при помощи единого сетевого коммуникационного механизма.
Например, это означает, что вы можете запустить программу на одной машине, а ввод и вывод переназначить на другую машину, соединенную с первой через сеть. Это - ключевая особенность X, которая позволила создать X-терминалы.
Этот документ не описывает установку или настройку сети или X в Linux. Для этого обращайтесь к соответствующим документам HOWTO, входящим в состав Проекта Документирования Linux. (см. раздел Разд. Ссылки).
Этот документ можно рассматривать как "Начинаем работу с XDM", потому что в нем описываются базовые принципы и концепции использования XDM и X-терминалов, а также приводятся простые примеры, обеспечивающие минимум безопасности.
Автор рекомендует вам обратиться к списку ссылок на другие документы, приведенному в конце этого текста. Там вы можете узнать, как продолжить настройку вашей системы, установить аутентификацию, усилить меры безопасности, так как примеры, приведенные ниже, сделаны на минимальном уровне защиты от внешних посягательств.
Заметьте также, что информация, приведенная в этом документе, собрана на основе опыта работы с системами Debian 2.1, SuSE 6.4, Mandrake 7.0 и RedHat 6.0.
Этот документ не описывает, как установить и настроить Linux для поддержки X-терминалов. Описание установки и настройки X-терминалов вы найдете в "HOWTO: Thin-Client" из Проекта Документирования Linux (Linux Documentation Project, см. раздел Разд. Ссылки).
Этот термин применяется во многих случаях, но самый простой вариант - это машина, подключенная к сети, у которой есть клавиатура, мышь и монитор, и она может запустить систему X windows для связи с сервером приложений, находящемся где-то в сети.
Существуют разные конфигурации "X-терминалов" разных уровней - начиная от полностью бездисковых терминалов, заканчивая мощными X-рабочими станциями.
Если проще, то XDM (X Display Manager) можно представить, как графическую замену стандартному входу в систему (login). На самом же деле он может значительно больше.
Обычно он запускается пользователем "root" (или скриптами загрузки системы) при включении машины, и предлагает пользователю графическое приглашение ко входу. После этого он управляет сессией работы пользователя с X - он запускает менеджер окон и приложения.
Это можно описать, как "простой вход в локальную систему". Так оно и есть по умолчанию во многих известных дистрибутивах Linux. Однако, XDM также может работать с удаленными X-серверами, и предоставлять приглашение ко входу в систему на удаленнных X-терминалах. Короче говоря, он не ограничен локальной машиной - он может управлять и другими машинами, подключенными к нему по сети.
XDM - очень мощная утилита, и этот документ лишь немного коснется его возможностей. Цель этого документа - донести до вас информацию о том, как настроить ваши X-терминалы и серверы приложений так, чтобы они могли связаться друг с другом. Более подробную информацию вы найдете в главе Разд. Ссылки.
Ниже описана следующая схема конфигурационных файлов XDM:
xdm-config
Xaccess
Xservers
Xresources
Эта схема применяется в (Debian 2.1. Mandrake 7.0.2, RedHat 6.2) :
Kevin Taylor
kevin@northants.lug.org.uk
Перевод: Станислав Рогин, ASPLinux
В этом документе описываются базовые идеи использования XDM для управления X-терминалами. Этот текст является не полным описанием всех возможностей XDM, а всего лишь введением в основы того, что XDM может делать с X-терминалами.
Более подробное описание установки и настройки X-терминалов вы найдете в "HOWTO: Thin-Client" из Проекта Документирования Linux (Linux Documentation Project, см.Разд. Ссылки).
В файле xdm-config можно настроить очень много разных опций, и он обычно уже поставляется настроенным. Во многих случаях, файла, поставляемого с вашим дистрибутивом, будет достаточно. Но если вам нужно больше...
Названия стартовых скриптов и конфигурационных файлов, используемых XDM, определяются специальными операторами в начале файла xdm-config. Это позволяет вам иметь разные наборы конфигурационных файлов для разных X-серверов и X-терминалов.
Например, предположим, что вы используете XDM для работы с вашим локальным дисплеем, но хотите, чтобы он обрабатывал и запросы с других X-терминалов сети. В этом случае можно задать два различных файла Xresources для себя и для удаленных терминалов. Для этого надо в файл xdm-config вписать следующие строки:
DisplayManager._0.resources /etc/X11/xdm/Xres_0 DisplayManager*resources /etc/X11/xdm/Xresources |
В результате этого для локального дисплея будет использоваться файл Xres_0 (_0 - это то же самое, что и :0, только на языке XDM), а для всех остальных - файл Xresources ('*').
Заметьте, что в конфигурационных файлах XDM для задания конкретного дисплея на машине используется терминология: машина_0, а не машина:0.
Аналогично вы можете задать специальный файл Xresources для конкретной машины примерно так:
DisplayManager.host_0.resources /etc/X11/xdm/Xres_host_0 |
Если вы взглянете в свою стандартную версию файла xdm-config, то вы обнаружите, что файлы конфигурации уже разделены на группы для локальной машины и для удаленных, так как в этих случаях xdm-сервером выполняются разные операции. В моем дистрибутиве Debian для локальных серверов использовались следующие файлы:
DisplayManager._0.resources: /etc/X11/xdm/Xresources_0 DisplayManager._0.setup: /etc/X11/xdm/Xsetup_0 DisplayManager._0.startup: /etc/X11/xdm/Xstartup_0 DisplayManager._0.reset: /etc/X11/xdm/Xreset_0 |
а для удаленных:
DisplayManager*resources: /etc/X11/xdm/Xresources DisplayManager*setup: /etc/X11/xdm/Xsetup DisplayManager*startup: /etc/X11/xdm/Xstartup DisplayManager*reset: /etc/X11/xdm/Xreset |
В этом разделе описывается настройка XDM для выполнений функций, описанных в предыдущей главе.
В каждом случае нижеописанная конфигурация - это необходимый для достижения цели минимум. В большинстве случаев эта конфигурация плохо защищена. Для того, чтобы усилить безопасность ваших X-терминалов и серверов приложений, читайте документацию, список которой приведен в разделе Разд. Ссылки.
В файле Xaccess задается список машин, которым разрешено посылать запросы на получение приглашения ко входу от XDM.
Пример
Для каждой машины, на которой XDM будет автоматически выдавать на ее экран приглашение ко входу в сервер приложений, необходимо задать строку в файле Xservers. Туда могут войти как локальная машина, так и список удаленных машин.
Пример
Этот документ появился на свет, потому что мне захотелось поэкспериментировать с Linux на 486-ой машине в качестве X-терминала моей главной Linux-машины.
После прочтения man, спецификаций, howto и документации, касающейся XDM и X-терминалов, я окончательно запутался во всем - зачем нужен XDM, что такое XDM-сервера и X-сервера и т.п. После этого я экспериментировал целый вечер, после чего и появился этот документ.
После того, как я рассортировал базовую терминологию, документация к XDM и примеры стали понятны - просто я не мог выяснить, с чего начать. Я надеюсь, что этот документ будет простым и понятным введением для тех, кто попал в такую же ситуацию.
А, кстати, если вам интересно - 486dx2/66 с 16 Мб ОЗУ может быть прекрасным X-терминалом!
Когда XDM получает косвенный запрос (предполагаем, что в файле Xaccess задана опция запуска программы "chooser"), он может предоставить в ответ список других XDM-серверов, которые ему известны.
В этом режиме пользователь вместо обычного приглашения ко входу получит на экране окно программы "chooser", которая позволит выбрать ему одну из найденных в сети машин с XDM-сервером.
Когда я впервые испытывал "chooser", я обнаружил, что размер окна этой программы, описанный в файле Xresources, поставляемом в комплекте с моими дистрибутивами SuSE и Debian, слишком велик. Исправьте следующим образом строку в файле Xresources:
Chooser*geometry: 700x500+300+200 |
Программа "chooser" получает список машин двумя способами:
Широковещательный запрос: В этом режиме "chooser" посылает широковещательный запрос по сети, и затем создается список из имен серверов приложений, ответивших на этот запрос..
Перечисление: Этот список также можно задать в файле Xaccess, например:
%hostlist emma alex liam * CHOOSER %hostlist |
Это означает, что машины emma, alex и liam будут в списке серверов приложений (скорее всего, даже если одна из машин отключена? Надо проверить....)
В этой главе приведен список ссылок на документы, которые использовались при написании этого текста, и в которых более подробно объяснены некоторые детали описанных здесь принципов:
Система X Window
HOWTO: Пользователь X (из LDP)
Man-страницы: X (главные принципы), Xserver (Принципы работа X-сервера)
X FAQ (в www.x.org)
Тонкие клиенты/X-терминалы
HOWTO: Тонкий клиента (из LDP)
HOWTO: Бездисковые станции (из LDP)
Веб-страницы, посвященные X-терминалам
XDM
Man-страницы : xdm
Перед тем, как мы продолжим, я должен разъяснить вам значение некоторых терминов, которые я буду использовать в этом документе. При разговорах об X немудрено запутаться в понятиях "сервер", "клиент" и т.п. Это особенно проявляется в случае, если вы собираетесь работать с X по сети, используя X-терминалы. В этом документе я буду употреблять следующие термины:
Бездисковый X-терминал
Это машина без локальных дисков, которая загружается через сеть при помощи сервера. Это значит, что она получает параметры сети, операционную систему, ее настройки и все приложения с сервера. После загрузки она представляет из себя "простой X-терминал" (см. ниже). Обычно эта система использует один или несколько протоколов удаленной загрузки: BOOTP, DHCP, TFTP и т.п. Подробнее о бездисковых станциях читайте в документах, перечисленных в главе Разд. Ссылки.
Простой X-терминал
Это машина, которая загружает операционную систему с локального диска, после этого запускает "X-сервер" и все. Далее каким-то образом на экране должно появиться приглашение ко входу в сервер приложений, который находится в другом месте сети.
Рабочая станция X
Она аналогична простому X-терминалу, за исключением того, что в ней можно войти в саму локальную машину, чтобы при необходимости у пользователя была возможность работы при отсутствии сети.
Сервер приложений
В этом документе, я буду называть "сервером приложением" машину, на которой работает X-сессия и X-приложения (на ней может не быть графической консоли, приглашения ко входу, и, возможно, экрана и клавиатуры вообще).
X-Сервер
Это машина с физической консолью (дисплей, клавиатура, мышь и т.п.), которая может предоставлять необходимые сервисы X-клиентам. Более подробно читайте в "HOWTO: Пользователь X", ссылка на который приведена в разделе Разд. Ссылки.
X-Клиент
Это приложение, которому для осуществления ввода-вывода требуется X-сервер.
Исходя из вышеприведенных описаний, рабочую станцию X можно представить в виде комбинации простого X-терминала и сервера приложений, работающих на одной машине.
В этом документе описаны несколько вариантов комбинаций элементов, перечисленных выше, а также описано, какую роль может играть xdm в настройке этих комбинаций.
Способ запуска самого X-сервера зависит от того, с каким XDM вы хотите работать - с локальным или удаленным.
Рабочая станция X: XDM и локальный X-сервер
XDM будет нормально запускать X-сервер автоматически, и сам XDM запускается обычно в процессе запуска X (в инициализационных скриптах).
X-Терминал : Удаленный XDM
Просто запустите X без клиентских программ, с такими правами, чтобы удаленный XDM мог связаться с вашим X-сервером. Ниже приведена команда запуска X без контроля доступа:
Другой метод одновременного использования двух (или более) мышей состоит в использовании программы MultiMouse, созданной Takashi Manabe. Это демон, осуществляющий мультиплексирование мышей, и делающий их доступными как MouseSystems-совместимык мыши через особое устройство /dev/mumse.
От автора: "Данная программа позволяет использовать несколько мышей одновременно. Она разрабатывалась для пользователей, желающих пользоваться подключенными устройствами совместно с внешней мышью, присоединенной к последовательному порту."
Я не уверен, будет ли программа поддерживать мышь, присоединенную не к последовательному порту, MultiMouse можно найти на сайте Sun (sunsite.unc.edu /pub/Linux/system/Misc) и Tucows (www.tucows.com Linux Console -> Utilities).
Авторские права на данный документ принадлежат Greg Wierzchowski. Он выпущен в соответствии с лицензией GNU Free Documentation License. Связь с автором: greg.wierzchowski@usa.net.
Авторские права на русский перевод этого текста принадлежат 01 ASPLinux Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: linux-howto@metalab.unc.edu>, или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу linux-howto@asplinux.ru>
Большое спасибо всем, кто внес свой вклад в развитие Linux и сделал возможным создание данного HOWTO.
Два очень важных параметра, отвечающих за корректную работу мыши, содержатся в файле XF86Config. Это параметр Protocol
и параметр Device.
Относительно содержания параметра Protocol: очевидно, это имя протокола, поддерживаемого gpm. Далее приводится выдержка из справочной страницы по gpm. (Наиболее распространенные типы):
Таблица 1. Most Common Mouse Protocols in X
Microsoft | Стандартная мышь Microsoft. |
MouseSystems | Стандартный протокол для трехкнопочных последовательных устройств. |
MMSeries | Название говорит само за себя. Это декодер для мыши, в любом случае принимающий стандартные последовательные команды. |
Logitech | Протокол, используемый старыми версиями последовательных мышей Logitech. |
BusMouse | Некоторые шинные устройства используют этот протокол, включая устройства от Logitech. |
PS/2 | Протокол, используемый большинством мышей для шинного контроллера. |
IMPS/2 | "IntelliMouse" для порта ps/2. Аналогично для USB мыши |
В системе XFree 3.x дополнительные указательные устройства типа мыши или планшетного указателя определены в секции Xinput. Первичная мышь обычно определена так:
Section "Pointer" Protocol "PS/2" Device "/dev/mouse" EndSection |
В данном случае это обычная, хорошо себя зарекомендовавшая трехкнопочная мышь PS/2. Теперь, для USB мыши:
Section "Xinput" SubSection "Mouse" DeviceName "USB Mice" Protocol "IMPS/2" ZAxisMapping 4 5 Port "/dev/input/mice" Alwayscore EndSubSection EndSection |
Моя мышь с колесом прокрутки, таким образом, протокол - IMPS/2. Строка ZAxisMapping необходима для работы колеса прокрутки. Так же я желаю, чтобы данная мышь работала совместно с другими указательными устройствами. Это обеспечивает опция AlwaysCore. Если бы это была последовательная мышь, то Port считывал бы "/dev/ttyS0" для COM1.
В системе XFree 4.x еще проще. Первая мышь обычно уже прописана в файле конфигурации:
Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Device" "/dev/mouse" Option "Protocol" "PS/2" Option "Emulate3Buttons" "off" Option "ZAxisMapping" "4 5" EndSection |
Для добавления еще одной мыши просто скопируйте данную секцию и измените данные примерно так, как указано ниже:
Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Device" "/dev/input/mice" Option "Protocol" "IMPS/2" Option "Emulate3Buttons" "off" Option "ZAxisMapping" "4 5" EndSection |
Таким образом Вы можете определить разные дополнительные указательные устройства, то же самое применимо к джойстикам и планшетным указателям.
Для того, чтобы заставить работать мыши совместно, в конфигурационном файле XF86Config необходимо сделать еще одно изменение в секции ServerLayout, где определены все компоненты. Так выглядит содержимое секции перед тем, как мы решили добавить вторую мышь:
Section "ServerLayout" Identifier "XFree86 Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection |
И так она выглядит после добавления второй мыши:
Section "ServerLayout" Identifier "XFree86 Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Mouse1" "AlwaysCore" InputDevice "Keyboard0" "CoreKeyboard" EndSection |
Greg Wierzchowski
greg.wierzchowski@usa.net
Перевод: Сергей Воложанин, ASPLinux
Краткие инструкции об использовании второй мыши в системе X Window.
И все! Я надеюсь, вам помогут эти советы. Я не думаю, что в ближайшем будущем куплю сервер XiGraphics - XFree86 версии 3.2 избавился от проблем с текстом, которые возникали на моей скромной видеокарте Trio 64 ;)
Однако, по-видимому, сервер XiGraphics поддерживает значительно больший спектр чипсетов и видеокарт, и, может так случиться, что у вас просто не будет другого выбора. Если так случится, и вы купите сервер XiGraphics, я буду очень рад узнать, пригодилась ли эта информация, или это все очень сложно, или вообще что-нибудь.
Marco Melgazzi
marco@techie.com
Перевод: Станислав Рогин, ASPLinux
Как преобразовать строку ModeLine XFree86 в формат XInside/XiGraphics
В приведенных ниже выдержках файлов знак -> указывает на то, что надо добавить. НЕ добавляйте этот знак в свои файлы!
Строка для монитора (у меня это файл monitors/mfreq/mfreq64.vda)
[ESTABLISHED_TIMINGS] "640x480 @ 60Hz", "640x480 @ 72Hz", "640x480 @ 75Hz", "800x600 @ 56Hz", "800x600 @ 60Hz", "800x600 @ 72Hz", "800x600 @ 75Hz", "1024x768 Interlaced", "1024x768 @ 60Hz", "1024x768 @ 70Hz", "1024x768 @ 75Hz", "1152x900 Interlaced", "1152x900 @ 60Hz", "1152x900 @ 67Hz", -> "1168x876 @ 72Hz", "1280x1024 Interlaced", "1280x1024 @ 60Hz", "1600x1200 Interlaced"; |
Файл конфигурации видеокарты (у меня это boards/s3/764-2.xqa , Мне очень интересно, почему в их в файле есть почти все карты Hercules, кроме МОЕЙ: Terminator 64/Dram )
[VISUAL] BitsPerPixel = 8; MemoryModel = Packed; ColorModel = Indexed; BitsRGB = 6; NumberOfColors = 256;
[RESOLUTIONS] 640x480, 800x600, 1024x768, -> 1168x876, 1152x900, 1280x1024 [DESKTOPS] 640x480, 800x600, 1024x768, 1152x900, -> 1168x876, 1280x1024, 1600x1200 |
Если частота вывода точек достаточно мала (так НЕ было в моем случае), то вы можете поместить эти строки и в секции 16-битных и 32-битных видеорежимов.
Файл /etc/Xaccel.ini будет выглядет примерно так
-------------------------------------------------------------- Board = "s3/764-2.xqa"; Monitor = "mfreq/mfreq64.vda"; Depth = 8; -> Desktop = 1168x876;
[RESOLUTIONS] -> 1168x876, 1024x768; |
Настоящий раздел определения видеорежима в файле etc/Xtimings
-------------------------------------------------------------- [PREADJUSTED_TIMING] PreadjustedTimingName = "1168x876 @ 72Hz";
HorPixel = 1168; // pixels VerPixel = 876; // lines PixelWidthRatio = 4; PixelHeightRatio = 3; HorFrequency = 64.024; // kHz VerFrequency = 71.138; // Hz ScanType = NONINTERLACED; HorSyncPolarity = POSITIVE; VerSyncPolarity = POSITIVE; CharacterWidth = 8; // pixels PixelClock = 105.000; // MHz HorTotalTime = 15.619; // (usec) = 205 chars HorAddrTime = 11.124; // (usec) = 146 chars HorBlankStart = 11.124; // (usec) = 146 chars HorBlankTime = 4.495; // (usec) = 59 chars HorSyncStart = 11.962; // (usec) = 157 chars HorSyncTime = 2.743; // (usec) = 36 chars VerTotalTime = 14.057; // (msec) = 900 lines VerAddrTime = 13.682; // (msec) = 876 lines VerBlankStart = 13.682; // (msec) = 876 lines VerBlankTime = 0.375; // (msec) = 24 lines VerSyncStart = 13.698; // (msec) = 877 lines VerSyncTime = 0.219; // (msec) = 14 lines |
Вы можете проверить качество преобразования формата следующим образом: запустите в сервере XInside программу vgaset: вы увидите строку, похожую на формат XFree, и, если все нормально, должны получить строку, почти аналогичную исходной (я так и не смог добиться равенства изначально совпадавших b и c, лучший вариант оказался следующим: c=b+1 ).
Предположим, что у вас имеется любимый видеорежим XFree86, и вы хотите перенести его в Xinside: для этого следуйте приведенным ниже инструкциям, у вас все должно получиться; в примере я использую мой любимый режим и объясню, как преобразовал его для XInside.
Строка Xfree86 выглядит примерно так:
Modeline "blahblah" DOTCLK A B C D a b c d |
Каждое из чисел A-D и a-d имеет конкретное значение: если хотите, можете взглянуть в 'Руководство по настройке видеорежимов X386/XFree86' (/usr/lib/X11/doc/VideoModes.doc), но для преобразования одного формата в другой эта теория вам абсолютно не нужна...
Моя строка видеорежима в /usr/lib/X11/XF86Config выглядит так:
Modeline "1168x876" 105 1168 1256 1544 1640 876 877 891 900 | | | | | | | | | DOT_CLK A B C D a b c d |
В Xinside, вам надо добавить секцию в файл Xtimings, который находится в etc/ (с этого момента я предполагаю, что вы находитесь в каталоге Xaccel, предположим /usr/X11/lib/X11/AcceleratedX)
! Где-то в файле. Поместите здесь необходимое название режима
[PREADJUSTED_TIMING] PreadjustedTimingName = "1168x876 @ 72Hz"; ! ! Эти четыре значения очевидны ! HorPixel = 1168; // точек VerPixel = 876; // строк PixelWidthRatio = 4; PixelHeightRatio = 3; ! ! hsync: DOT_CLK / D * 1000 [кГц] ! ! hsync = 105 / 1640 * 1000 = 64.024 кГц ! ! vsync: ( 1 / (( D / DOT_CLK ) * d) ) * 1,000,000 [Гц] ! ! vsync: ( 1 / (( 1640 / 105 ) * 900) ) * 1,000,000 ! ( 1 / 14057.1428571 ) * 1,000,000 = 71.138 Гц ! HorFrequency = 64.180; // кГц VerFrequency = 71.138; // Гц ! Очевидное значение ScanType = NONINTERLACED; ! ! Здесь проставьте значения соответственно параметрам +/-hsync и +/-vsync из настроек XFree86 ! HorSyncPolarity = POSITIVE; VerSyncPolarity = POSITIVE; ! Не изменяйте CharacterWidth = 8; // pixels ! Здесь укажите значение DOT_CLK PixelClock = 105.000; // MHz ! ! ! интервалы горизонтальной развертки: [мкс] ! HorTotalTime = D / DOT_CLK = 15.619; HorAddrTime = A / DOT_CLK = 11.124; HorBlankStart = A / DOT_CLK = 11.124; HorBlankTime = HorTotalTime - HorBlankStart = 4.495; HorSyncStart = B / DOT_CLK = 11.962; HorSyncTime = C / DOT_CLK - HorSyncStart = 2.743; ! ! интервалы вертикальной развертки: [мс] ! VerTotalTime = ( HorTotalTime * d ) / 1000 = 14.057; VerAddrTime = ( HorTotalTime * a ) / 1000 = 13.682; VerBlankStart = ( HorTotalTime * a ) / 1000 = 13.682; VerBlankTime = VerTotalTime - VerBlankStart = 0.375; VerSyncStart = ( HorTotalTime * b ) / 1000 = 13.698; VerSyncTime = ( HorTotalTime * ( c - b ) ) / 1000 = 0.219 ! И все! |
Этот вновь созданный видеорежим необходимо поместить в соответствующее место в файлах, которые я перечислю ниже.
Я абсолютно не понимаю политики Xinside, заключающейся в полном отсутствии возможности настройки видеорежимов (типа xvidtune) и/или импортирования существующих настроек XFree (и подобных ей коммерческих систем). Я потратил около трех часов, чтобы их соединить (подсказка: Я сравнивал в обоих форматах строки, относящиеся к видеорежиму VESA 1024x768@70Hz (а я ведь почти инженер-электронщик;-)) в то время как программисту Xinside понадобилось бы, наверно, несколько минут, чтобы написать нечто подобное...
Я не загружал XInside версии 1.3 и позже - я искренне надеюсь, что в новых версиях они устранили это недоразумение. Конечно, если они это сделали, то данный текст можно считать бесполезным, но вы все-таки можете прочитать его, чтобы понять, как все работает...
bash поддерживает переменную $PROMPT_COMMAND, содержащую команду, запускаемую перед выводом приглашения. Этот пример устанавливает заголовок окна имя_пользователя@имя_машины: каталог:
dtterm устанавливает $TERM=dtterm и понимает как последовательности xterm, так и Sun cmdtool
(проверено на Solaris 2.5.1, Digital Unix 4.0, HP-UX 10.20).
В csh это все достаточно сложно:
switch ($TERM) case "xterm*": set host=`hostname` alias cd 'cd \!*; echo -n "^[]0;${user}@${host}: ${cwd}^Gcsh% "' breaksw default: set prompt='csh% ' breaksw endsw |
где мы переопределяем команду cd для того, чтобы она посылала escape-последовательности. Заметим, что ^[ и ^G - символы ESC и BEL
(они могут быть введены в emacs при помощи C-q ESC и C-q C-g).
Заметим, что на некоторых системах команда hostname -s выдает короткое имя машины, вместо длинного, а некоторые пользователи могут использовать `pwd` (обратные кавычки запускают команду pwd), вместо $cwd, чтобы получить более точный путь.
Для большинства людей более полезны заголовки, отражающие динамическую информацию, такую как имя пользователя или текущий каталог.
В других оболочках, не имеющих аналога функции preexec(), это осуществить не просто. Если кто-то это сделал, пошлите пример автору этого текста.
Заголовок окна или имя иконки могут быть изменены при помощи escape-последовательностей:
ESC]0;строкаBEL -- Устанавливает строку в качестве имени иконки и заголовка окна
ESC]1;строкаBEL -- Устанавливает имя иконки
ESC]2;строкаBEL -- Устанавливает текст заголовка окна
где ESC - это символ escape (\033), а BEL - это символ bell (\007).
Вывод этой последовательности на терминал xterm приведет к изменению заголовка окна или иконки.
Примечание: эти последовательности относятся к терминалу xterm и его производным, таким как nxterm, color-xterm и rxvt. Другие типы терминалов часто используют другие последовательности; см. приложение. Полный список escape-последовательностей для xterm см. в файле ctlseq2.txt, поставляемом вместе с дистрибутивом xterm; или в xterm.seq, поставляемом с дистрибутивом rxvt.
hpterm устанавливает $TERM=hpterm и использует последовательности:
ESC&f0kдлинаDстрока Устанавливает строку длиной в качестве заголовка окна
ESC&f-1kдлинаDстрока Устанавливает строку длиной в качестве имени иконки
Простая программа на C, вычисляющая длину строки и выводящая ее, выглядит примерно так:
#include int main(int argc, char *argv[]) { printf("\033&f0k%dD%s", strlen(argv[1]), argv[1]); printf("\033&f-1k%dD%s", strlen(argv[1]), argv[1]); return(0); } |
Можно написать простой скрипт, использующий ${#string}
(zsh, bash, ksh) или ${%string}
(tcsh) для вычисления длины строки. Для zsh:
case $TERM in hpterm) str="\e]0;%n@%m: %~\a" precmd () {print -Pn "\e&f0k${#str}D${str}"} precmd () {print -Pn "\e&f-1k${#str}D${str}"} ;; esac |
Ric Lister
ric@giccs.georgetown.edu
Перевод: Павел Гашев, ASPLinux
Этот документ описывает, как изменять заголовки окон и подписи иконок в xterm. Даны примеры для различных оболочек, а в приложении представлены escape-последовательности для различных типов терминалов.
ksh дает не много возможностей для наших целей, так что нам придется вставить escape-последовательности прямо в приглашение. Следующий пример устанавливает заголовок окна имя_пользователя@имя_машины: каталог и приглашение ksh$.
Большинство современных терминалов являются производными xterm или rxvt
и поддерживают те же escape-последовательности, которыми мы пользовались раньше. Некоторые фирменные терминалы, идущие вместе с различными версиями Unix, имеют свои собственные escape-последовательности.
Может быть полезно написать маленькую программу, вставляющую аргумент в заголовок. Ниже представлены несколько примеров.
Ниже представлены примеры для большинства оболочек - начиная с zsh, который предоставляет для этого специальные средства, и далее в порядке увеличения сложности.
Чтобы убедиться в том, что мы находимся в xterm, мы проверяем переменную $TERM
на предмет $TERM=xterm*; шаблон необходим, потому что в некоторых случаях (например для rxvt) она может быть установлена $TERM=xterm-color.
Заметим также, что в производных C-shell, таких как tcsh и csh, неопределенные переменные вызывают фатальную ошибку. Таким образом, перед тем как проверить содержимое переменной $TERM, мы должны проверить ее наличие. Чтобы добиться этого, мы должны использовать:
Эти терминалы устанавливают $TERM=iris-ansi и используют escape-последовательности:
ESCP1.yстрокаESC\ Устанавливает заголовок окна
ESCP3.yстрокаESC\ Устанавливает имя иконки
Для полного списка escape-последовательностей xwsh: man 1G xwsh.
Терминалы Irix также поддерживают последовательности xterm для установки заголовка окна и имени иконки раздельно, но не для установки и того и другого вместе.
Статический заголовок для xterm, color-xterm или rxvt, может быть установлен при помощи ключей -T и -n:
xterm -T "Мой заголовок XTerm" -n "Мой заголовок иконки XTerm" |
cmdtool и shelltool устанавливают $TERM=sun-cmd и используют последовательности:
ESC]lстрокаESC\ Устанавливает заголовок окна
ESC]LстрокаESC\ Устанавливает имя иконки
Это ужасная программа - пользуйтесь чем-нибудь другим.
Для вывода информации, не меняющейся в течении всего сеанса работы - такой, как имя машины или имя пользователя, достаточно поместить в rc-файл следующую строчку:
echo -n "\033]0;${USER}@${HOST}\007" |
которая установит заголовок окна в имя_пользователя@имя_машины, если переменные $USER и $HOST установлены правильно. Требуемые опции команды echo зависят от оболочки (см. примеры ниже).
Если в течении сеанса заголовок окна должен меняться (напр. текущий каталог), escape-последовательности должны выводиться каждый раз, когда изменяется приглашение оболочки. Некоторые оболочки позволяют вставлять такие последовательности прямо в строку приглашения. Это иллюстрируется в следующем разделе.
Пользователь часто запускает "долгоиграющие" задачи, такие как top, текстовый редактор, почтовый клиент и т.д., и хочет видеть название задачи в заголовке окна. Это более сложная задача, и она может быть легко решена только в zsh.
zsh предоставляет идеальную встроенную функцию для этих целей:
zsh предоставляет несколько функций и расширений, которые мы будем использовать: