Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Мини-HOWTO: Большой курсор в X11

Как увеличить курсор мыши в X windows

Jorg Schneider

joerg.schneider@ira.uka.de

Перевод: Павел Гашев, SWSoft Pte Ltd.

версия 2, 11 августа 1997

В этом документе описывается процесс, позволяющий увеличить курсор мыши в X-windows.


1. Введение

Существует несколько причин, по которым стандартный курсор X11 может быть маловат:

  • когда X запущен на портативном компьютере с жидкокристаллическим дисплеем (LCD) с низким контрастом;

  • на нормальных дисплеях с большим разрешением (например 1600x1280);

  • для человека с плохим зрением даже на нормальном оборудовании.

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

Насколько я знаю, не существует простого пути для создания такой утилиты, так как X-протокол не имеет представления о том, как узнать вид курсора. Для более подробной информации см. раздел "Технические рассуждения".

Впрочем, кое-что можно сделать:

Существует набор стандартных курсоров мыши, которые находятся в шрифте "cursor" (вы можете посмотреть их командой "xfd -fn cursor"). Большинство программ используют именно эти курсоры, и ключевой идеей является замена стандартного шрифта "cursor" на увеличенную версию.


2. Об этом документе

Причиной написания этого мини-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/.


3. Как это сделать

Следуйте шагам, описанным ниже. Если вы не хотите загружать и компилировать пакет bdfresize, вы можете пропустить первые три шага и найти увеличенный шрифт, вместо того, чтобы создавать его.

  1. берем файл cursor.bdf (исходный текст шрифта "cursor") из какого-нибудь дистрибутива X, например ftp://ftp.x.org/pub/R6.3/xc/fonts/bdf/misc/cursor.bdf (если вы его там не найдете, попробуйте поискать его в сети или возьмите мою копию).

  2. берем, компилируем и инсталлируем пакет 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

  3. создаем каталог и записываем в него увеличенный шрифт (например в два раза): 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.

  4. изменяем файлы .xinitrc или .xsession: перед тем как запустится X-клиент (который использует курсор), должны запускаться следующие команды: xset +fp $HOME/fonts xsetroot -cursor_name X_cursor

  5. перезапустите X-сервер.

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


4. Замечания и ограничения

  • 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, выглядят не очень гладкими, особенно при большом увеличении. Было бы не плохо, если бы кто-нибудь нарисовал свои крупные курсоры.


5. Технические рассуждения

Возможно ли написать программу, автоматически увеличивающую указатели?

Решение 1 (частичное)

Использовать XTestCompareCursor из XTEST. Для всех окон, над которыми движется указатель мыши курсор окна сравнивается с набором "известных" курсоров (например, из шрифта cursor). Если найден похожий курсор, то он заменяется на увеличенную версию. В противном случае, он остается без изменения или подставляется стандартный курсор. Это работает в том случае, если у вас есть XTest.

Решение 2

Написать X-прокси-сервер, передающий все запросы на X-сервер, за исключением запросов соответствующих функции XCreate*Cursor из библиотеки Xlib. Курсоры, определенные в запросах XCreate*Cursor должны изменяться на соответствующие увеличенные.

Прокси-сервер имитирует новый дисплей, например :1. Все клиенты, использующие этот дисплей (например xterm -display :1) показываются на обычном X-сервере :0), но их курсоры автоматически увеличиваются. Курсоры клиентов, использующих :0 не изменяются.


6. Другие идеи, позволяющие сделать курсор более заметным

Вот некоторые идеи, позволяющие сделать курсор более заметным, при помощи простых программ.

  • Когда нажимается какая-нибудь клавиша, вывести на пол-секунды что-нибудь (большой курсор или маленькое окно) на месте курсора.

  • Использовать XRecolorCursor для смены цвета курсора каждую 0.1 секунды.

Более ожидаемое решение - это мышиный хвост а-ля windows, т.е. при движении мыши, курсор рисуется на новом месте, а на старом месте стирается только через некоторую задержку. Мышиный хвост лучше всего реализовать в X-сервере, но проще все его сделать как X-клиент, а еще лучше как прокси-сервер (см. "Технические рассуждения").


7. Дополнительная информация

7.1. Сервер шрифтов

Сервер шрифтов - это сетевой сервис с простым протоколом, предоставляющий X11 набор шрифтов. Он предоставляет как список шрифтов, так и изображение.

Вы можете использовать сервер шрифтов для модифицированных шрифтов вместо того, чтобы хранить их у себя на компьютере.

Этот способ особенно удобен, если несколько машин не используют общую файловую системы или если вы пользуетесь X-терминалами.

Сам сервер шрифтов и утилиты, связанные с ним, идут с дистрибутивом X11R5+ (AFAIK).


7.1.1. Установка сервера шрифтов

Прочитайте руководства 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,

которая должна выполниться без ошибок.


7.2. Как достать bdf-файлы для некоторых шрифтов

Если у вас установлен сервер шрифтов, то используйте команду fstobdf, идущую вместе с сервером.

Кроме того, вы можете попробовать команду getbdf, которая записывает любой установленный в X11 шрифт в bdf файл.


8. Авторские права

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу