Большой курсор в X11
Введение
Существует несколько причин, по которым стандартный курсор X11 может быть маловат:
когда X запущен на портативном компьютере с жидкокристаллическим дисплеем (LCD) с низким контрастом;
на нормальных дисплеях с большим разрешением (например 1600x1280);
для человека с плохим зрением даже на нормальном оборудовании.
В любом случае, увеличение курсора может решить проблему. Идеально, если эту задачу выполняет одна X-программа, автоматически увеличивающая каждый раз все виды курсоров.
Насколько я знаю, не существует простого пути для создания такой утилиты, так как X-протокол не имеет представления о том, как узнать вид курсора. Для более подробной информации см. раздел "Технические рассуждения".
Впрочем, кое-что можно сделать:
Существует набор стандартных курсоров мыши, которые находятся в шрифте "cursor" (вы можете посмотреть их командой "xfd -fn cursor"). Большинство программ используют именно эти курсоры, и ключевой идеей является замена стандартного шрифта "cursor" на увеличенную версию.
Об этом документе
Причиной написания этого мини-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/.
Как это сделать
Следуйте шагам, описанным ниже. Если вы не хотите загружать и компилировать пакет 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-сервер.
Это все. Теперь все курсоры мыши должны быть в два раза больше.
Замечания и ограничения
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, выглядят не очень гладкими, особенно при большом увеличении. Было бы не плохо, если бы кто-нибудь нарисовал свои крупные курсоры.
Технические рассуждения
Возможно ли написать программу, автоматически увеличивающую указатели?
Решение 1 (частичное)
Использовать XTestCompareCursor из XTEST. Для всех окон, над которыми движется указатель мыши курсор окна сравнивается с набором "известных" курсоров (например, из шрифта cursor). Если найден похожий курсор, то он заменяется на увеличенную версию. В противном случае, он остается без изменения или подставляется стандартный курсор. Это работает в том случае, если у вас есть XTest.
Решение 2
Написать X-прокси-сервер, передающий все запросы на X-сервер, за исключением запросов соответствующих функции XCreate*Cursor из библиотеки Xlib. Курсоры, определенные в запросах XCreate*Cursor должны изменяться на соответствующие увеличенные.
Прокси-сервер имитирует новый дисплей, например :1. Все клиенты, использующие этот дисплей (например xterm -display :1) показываются на обычном X-сервере :0), но их курсоры автоматически увеличиваются. Курсоры клиентов, использующих :0 не изменяются.
Другие идеи, позволяющие сделать курсор более заметным
Вот некоторые идеи, позволяющие сделать курсор более заметным, при помощи простых программ.
Когда нажимается какая-нибудь клавиша, вывести на пол-секунды что-нибудь (большой курсор или маленькое окно) на месте курсора.
Использовать XRecolorCursor для смены цвета курсора каждую 0.1 секунды.
Более ожидаемое решение - это мышиный хвост а-ля windows, т.е. при движении мыши, курсор рисуется на новом месте, а на старом месте стирается только через некоторую задержку. Мышиный хвост лучше всего реализовать в X-сервере, но проще все его сделать как X-клиент, а еще лучше как прокси-сервер (см. "Технические рассуждения").
Дополнительная информация
Сервер шрифтов
Сервер шрифтов - это сетевой сервис с простым протоколом, предоставляющий 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,
которая должна выполниться без ошибок.
Как достать bdf-файлы для некоторых шрифтов
Если у вас установлен сервер шрифтов, то используйте команду fstobdf, идущую вместе с сервером.
Кроме того, вы можете попробовать команду getbdf, которая записывает любой установленный в X11 шрифт в bdf файл.