Xorg. xfs. Что-то странное с подгрузкой шрифтов.
Занялся застарелой проблемой -- нормальной настройкой некоторых иксовых
приложений, которые используют битмаповые шрифты. Наткнулся на какое-то
странное поведение иксов. Не могу понять, баг это или так и должно быть.
У меня Etch. Итак. Я хочу, чтобы битмапленые шрифты у меня поставлялись
через xfs. Заглядываем в /etc/X11/fs/config на тему путей (форматировано
мной. Все пути в одну строчку):
catalogue = /usr/share/fonts/X11/misc/,
/usr/share/fonts/X11/cyrillic/,
/usr/share/fonts/X11/100dpi/:unscaled,
/usr/share/fonts/X11/75dpi/:unscaled,
/usr/share/fonts/X11/Type1/
Все нормально. Теперь в xorg.conf пишем:
Section "Files"
FontPath "unix/:7100"
EndSection
Запускаю xlsfonts, чтобы просмотреть, какие шрифты доступны, и получаю
довольно странный результат: многие шрифты просто дублируются по два,
а то и по три раза. Привожу пример вывода xlsfonts:
-adobe-helvetica-bold-o-normal--11-80-100-100-p-60-iso10646-1
-adobe-helvetica-bold-o-normal--11-80-100-100-p-60-iso10646-1
-adobe-helvetica-bold-o-normal--11-80-100-100-p-60-iso8859-1
-adobe-helvetica-bold-o-normal--11-80-100-100-p-60-iso8859-1
-adobe-helvetica-bold-o-normal--12-120-75-75-p-69-iso10646-1
-adobe-helvetica-bold-o-normal--12-120-75-75-p-69-iso10646-1
-adobe-helvetica-bold-o-normal--12-120-75-75-p-69-iso8859-1
-adobe-helvetica-bold-o-normal--12-120-75-75-p-69-iso8859-1
...
-xos4-terminus-medium-r-normal--32-320-72-72-c-160-iso10646-1
-xos4-terminus-medium-r-normal--32-320-72-72-c-160-iso10646-1
-xos4-terminus-medium-r-normal--32-320-72-72-c-160-iso10646-1
-xos4-terminus-medium-r-normal--32-320-72-72-c-160-iso8859-1
-xos4-terminus-medium-r-normal--32-320-72-72-c-160-iso8859-1
-xos4-terminus-medium-r-normal--32-320-72-72-c-160-iso8859-1
Заглядываю в лог иксов /var/log/Xorg.0.log, а там такая строчка:
(**) FontPath set to
"unix/:7100,/usr/share/fonts/X11/misc/,/usr/share/fonts/X11/TTF/,
/usr/share/fonts/X11/OTF,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/CID/,
/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/75dpi/"
Ситуация странная, так как в 'man xorg.conf' четко написано:
Font server identifiers have the form:
<trans>/<hostname>:<port-number>
where <trans> is the transport type to use to connect to the
font server (e.g., unix for UNIX-domain sockets or tcp for a
TCP/IP connection), <hostname> is the hostname of the machine
running the font server, and <port-number> is the port number
that the font server is listening on (usually 7100).
When this entry is not specified in the config file, the server
falls back to the compiled-in default font path, which contains
the following font path elements:
/usr/lib/X11/fonts/misc/
/usr/lib/X11/fonts/TTF/
/usr/lib/X11/fonts/Type1/
/usr/lib/X11/fonts/CID/
/usr/lib/X11/fonts/75dpi/
/usr/lib/X11/fonts/100dpi/
То есть, если путь "unix/:7100" обнаружен, то он не должен пытаться
грузить шрифты по вкомпиленным в сервер путям, а тут, похоже, пытается. У
меня закралось предположение, что сервер неправильно себя ведет, поэтому
в xlsfonts повторения. К тому же путь к битмапленым шрифтам прописан по
умолчанию в fontconfig: <dir>/usr/share/fonts</dir>. То есть еще и
третий раз.
Прежде чем писать сюда, я проделал некоторые действия для выяснения, что
происходит. Повторения исчезают, если я пропишу пути к шрифтам в
xorg.conf, уберу "unix/:7100", т. е. не буду использовать xfs
вообще:
Section "Files"
# FontPath "unix/:7100"
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
EndSection
Но и тут имеем странный для меня вывод в логе:
(WW) The directory "/usr/share/fonts/X11/TTF/" does not exist.
Entry deleted from font path.
(WW) The directory "/usr/share/fonts/X11/OTF" does not exist.
Entry deleted from font path.
(WW) The directory "/usr/share/fonts/X11/CID/" does not exist.
Entry deleted from font path.
(==) FontPath set to "/usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,
/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/75dpi/"
То есть и тут сервер пытается зачем-то искать умолчательные пути.
Заметил, почему некоторые шрифты по два раза повторяются, а некоторые по
три и даже четыре. По три повторяются те шрифты, на которые есть
псевдонимы в файлах fonts.alias по указанным путям, т. е. если посчитать, сколько
псевдонимов на шрифт и прибавить 2, то будет число повторений в
xlsfonts. Пример из файла /usr/share/fonts/X11/fonts.alias
-misc-fixed-medium-r-semicondensed--13-100-100-100-c-60-iso8859-1 \
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
6x13 -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
Поэтому имеем в выводе xlsfonts
...skip...
-misc-fixed-bold-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-bold-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-bold-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-bold-r-semicondensed--13-120-75-75-c-60-iso8859-1
...skip...
Пробовал также убрать путь из fontconfig <dir>/usr/share/fonts</dir> и
заменить его на <dir>/usr/share/fonts/truetype</dir>
<dir>/usr/share/fonts/type1</dir>. То есть исключил из видимости путь к
шрифтам X11. Результата не дало.
Мне для начала хотелось бы узнать, есть ли у кого такая проблема? Если вы
меня спросите, что меня в этом раздражает, то скажу, что есть одна
проблема странная, которую я еще не могу напрямую увязать с тем, что я
описываю выше.
Настраиваю Emacs. В ~/.Xresources пишу Emacs.font: terminus-14. Это
псевдоним, который описан в ...X11/misc/fonts.alias. Вот кусочек оттуда:
terminus-12 -xos4-terminus-medium-r-normal--12-120-72-72-c-60-iso10646-1
terminus-14 -xos4-terminus-medium-r-normal--14-140-72-72-c-80-iso10646-1
terminus-16 -xos4-terminus-medium-r-normal--16-160-72-72-c-80-iso10646-1
terminus-20 -xos4-terminus-medium-r-normal--20-200-72-72-c-100-iso10646-1
terminus-24 -xos4-terminus-medium-r-normal--24-240-72-72-c-120-iso10646-1
terminus-28 -xos4-terminus-medium-r-normal--28-280-72-72-c-140-iso10646-1
terminus-32 -xos4-terminus-medium-r-normal--32-320-72-72-c-160-iso10646-1
terminus-bold-12 -xos4-terminus-bold-r-normal--12-120-72-72-c-60-iso10646-1
terminus-bold-14 -xos4-terminus-bold-r-normal--14-140-72-72-c-80-iso10646-1
terminus-bold-16 -xos4-terminus-bold-r-normal--16-160-72-72-c-80-iso10646-1
terminus-bold-20 -xos4-terminus-bold-r-normal--20-200-72-72-c-100-iso10646-1
terminus-bold-24 -xos4-terminus-bold-r-normal--24-240-72-72-c-120-iso10646-1
terminus-bold-28 -xos4-terminus-bold-r-normal--28-280-72-72-c-140-iso10646-1
terminus-bold-32 -xos4-terminus-bold-r-normal--32-320-72-72-c-160-iso10646-1
Этот алиас нормально виден через xlsfonts. То есть доступен. Запускаю
xrdb, чтобы обновить ресурсы. Запускаю Emacs. И когда он стартует Emacs,
то возникает внушительный лаг с полным замиранием иксов и мыши,
индикатора загрузки CPU. А потом нормально грузится с указанным
шрифтом. А если я делаю Emacs.font: terminus-bold-14 , то лага нет. Если
делаю terminus-16 (не bold), то лага тоже нет. С terminus-12 опять есть
лаг. Прописал вместо псевдонима настоящие названия шрифтов. Тот же
результат. Не помогло. Пока я не могу понять,
что происходит. Смотрел при помощи strace, что происходит, когда
возникает лаг. Так вот Emacs зачем-то начинает искать какие-то другие
шрифты. Такое ощущение, что он не видит сначала terminus-14, а
terminus-bold-14 видит почему-то. Такие же вещи происходят и с XMMS. То
есть это не проблема Emacs, наверное. И это получается в независимости
от того, используется ли xfs или шрифты грузятся сервером локально.
Не знаю, что я еще не описал. Теперь вопрос: это у меня только так?
Никто подобного не замечал?
Для справки: у меня чистый Etch без правок. Самый последний срез.
Спасибо, если броситесь проверять у себя или поясните, что происходит. :)
Reply to: