[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: