Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Categories:

линукс

Беспорядочные впечатления от постепенного перехода на Линукс. Малоинтересно и много технической мути.

Я был уверен, что буду и по Линуксом пользоваться седьмой Оперой. И действительно, она установилась и отлично побежала, всё привычное и хорошее. Но тут я соблазнился всё же попробовать Mozilla Firebird. В последний раз, когда я пробовал Мозиллу, это было что-то совершенно неподъёмное и глючное, а Mozilla Phoenix (это, если не ошибаюсь, та же Firebird в ранних версиях) - слишком сырое. Но сейчас всё оказалось совсем по-другому. Firebird мне очень понравилась - быстро поднимается, быстро рендерит, отлично показывает ивритские сайты (в отличие от Оперы). Все те штуки, к которым я привык в Опере, есть в Mozilla Firebird в виде extensions, которые можно дополнительно сгрузить (например, mouse gestures, или больше возможностей управлять табами). Даже для Notes Оперы (возможность легко писать в левом сайдбаре автосохраняющиеся иерархические записки - я к этому очень привык) нашлась extension в Firebird (правда, не иерархические пока, а только две записки, но это уже нормально, а потом, небось, улучшат), что окончательно решило вопрос - перехожу на Мозиллу. Единственное, что осталось решить - проблему фонтов.

В общем, я подозревал с самого начала, что без True Type шрифтов лучше в X и не соваться - слишком уродливо и плохая поддержка языков. Gentoo инсталлирует базовый набор Виндовских шрифтов (бесплатный майкрософтовский набор core fonts, правда некоторые там называются (имя вендора) monotype, а другие microsoft - непонятно, почему) вместе с X, надо только всунуть путь к ним в FontPath конфиг-файла, что я сразу и сделал после инсталляции X. Оказалось, однако, что это только начало. xlsfonts распознал и продолжал распознавать все эти True Type-шрифты, но когда я установил Gnome2, в его диалоге выбора шрифтов их не было. Почему? Оказалось, я ничего не знал о загадочных штуках под названием Xft и FontConfig. Xft обеспечивает особенно хороший рендеринг шрифтов, с anti-aliasing, smoothing и hinting особенно хорошего качества (правда, я не очень понял, что из этого делает он сам, а для чего использует freetype, с помощью которой читает True-Type шрифты - и если использует freetype, которая, в общем-то, модуль внутри X, почему и без Xft все эти штуки не работают). FontConfig используется в качестве библиотеки общего назначения для каталогизирования и выбора шрифтов - настолько общего назначения, что она не зависит от X (например, её можно использовать в аппликациях для печати, когда X вообще не установлен). Поэтому она не получает список директорий шрифтов и не знает по умолчанию о моих True-Type шрифтах в /usr/X11R6/lib/X11/fonts/trutype . Пришлось отыскивать её конфиг-файлы (в /etc/fonts/), разбираться в них и добавлять эту директорию в список. После этого True-Type шрифты стали распознаваться в Gnome2 и он стал их использовать автоматически (видимо, благодаря FontConfig'у).

Интересно получилось, например, с LogJam: после того, как я его установил и запустил, он сначала отказался показывать русские буквы, писал вместе этого маленькие картинки с четырьмя цифрами (Unicode-код) вместо каждой буквы. Если же я запускал его так: GDK_USE_XFT=0 logjam (спасибо gaal за подсказку), то он начинал правильно писать русские буквы, хоть и не очень красиво. Это было ещё до того, как я добавил True-Type директорию в конфигурацию FontConfig. Я понял так: когда я говорю GDK_USE_XFT=0, logjam не использует Xft для рендеринга шрифтов, а использует стандартные средства X, который знает про True-Type шрифты (благодаря FontPath) и поэтому всё показывает - но не очень красиво, т.к. нет Xft, к-й делал бы anti-aliasing и прочие хорошие штуки. После того, как я включил True-Type директорию в конфигурацию FontConfig, LogJam стал и в обычном запуске (с GDK_USE_XFT=1, который включен по умолчанию после инсталляции Gnome) показывать русские буквы, и намного красивее и гармоничнее - т.е. через Xft, очевидно. Но мне не очень понятно, почему без True-Type шрифтов Xft не могла найти что-нибудь для русских букв (пусть даже битмаповые шрифты самого X, или шрифты Type1 - все они были в её конфигурации).

Хоть теперь Xft красиво рендерит True-Type шрифты (кроме некоторых проблем с Оперой и Мозиллой, о которых ниже), некоторыми вещами я не очень доволен в этой конфигурации, точнее недоволен не конфигурацией, а тем, что не понимаю, как некоторые вещи обнаружить. В опциях десктопа Gnome можно установить качество обработки шрифтов - делать ли им anti-aliasing и hinting, и какого уровня; насколько я понимаю, это опции Xft (я вообще не очень разбираюсь в том, что они значат и какие лучше выставлять, только понял, что subpixel smoothing мне не нужен, т.к. экран у меня не LCD). Но мне непонятно, каким образом выставленные там опции действуют после этого на всех запускаемых аппликациях, т.е. где эта информация сохраняется и как она распостраняется на другие аппликации (и делается ли это на уровне Gtk и тогда работает только в аппликациях, использующих Gtk? Или делается как-то на уровне Xft?). Это, впрочем, любопытство программиста. Другие вещи мешают мне больше. Я не знаю, например, как узнать, какой именно фонт в точности использует данная аппликация (можно как-то?). Пример номер раз: в конфигурации десктопа Gnome я выбираю дифолтные шрифты для всяких целей (Desktop Preferences->Fonts). По умолчанию, например, там стоит выбор "Sans" в одном месте и "Monospace" в другом. Я знаю (из чтения конфигурации FontConfig), что это на самом деле сборные имена для многих шрифтов, из которых, по-видимому, FontConfig сам выбирает наиболее подходящий во время runtime. Например, "Sans" это Helvetica, или Arial, или Verdana, или Nimbus Sans, или Luxi Sans... Когда я выбрал шрифт "Sans", FotoConfig выбрал за меня один из них, наиболее подходящий, и использует именно его. Но какой именно шрифт он выбрал? Я не вижу возможности это узнать! Перепробовав один за другим выбрать "настоящие" шрифты, и сравнивая, по образцу выбранного шрифта, к-й показывается во время отбота, их с выбором "Sans", я понял, что в данном случае он выбирает Verdana. Но это же ненормальный способ это узнавать - как же узнать это быстрее и лучше? Пример 2: та же проблема в терминале (программа gnome-terminal) - он сразу включает какой-то незнакомый мне шрифт. Этот шрифт мне в принципе даже нравится, но я хочу знать, какой это шрифт. Заходя в опции выбора шрифта внутри программы, я обнаруживаю, что включена опция "Use the same font as other applications" - но где записано, какой это шрифт? Отключив эту опцию, и перебирая методически все шрифты вручную, я обнаруживаю, что это был Andale Mono. Как я должен был узнать это без перебора? И, кстати, это не тот шрифт, что я выбрал в опциях десктопа, в опции "Terminal font" - зачем же тогда нужна эта опция?

Опера и Мозилла. В каких отношениях Опера находится с Xft, мне не очень понятно. С одной стороны, она явно использует Xft, и когда, например, я убираю опции anti-aliasing и hinting в десктопе Gnome и перегружаю Оперу, она начинает всё показывать "плохо", теми же шрифтами, но явно хуже всё рендерится - что подсказывает мне, что она пользуется Xft. С другой стороны, даже когда Xft не знала про True-Type шрифты, Opera про них знала и давала их выбрать в своей конфигурации, т.е. список шрифтов она, видимо, берёт у X? Не очень это мне понятно. Более серьёзная проблема возникла в другом месте: Опера плохо показывала страницы ЖЖ, слишком маленький шрифт, причём явно серифный, хоть обычно я привык к ЖЖ sans-serif (собственно, понял, что привык, только после того, как заметил, что Опера как-то "не так" показывает - обычно я совершенно не замечаю такие вещи). Инспекция исходников стадартной схемы ЖЖ показала, что там везде прописана font-family "Verdana, Arial, Helvetica", что на моей системе вроде бы должно выбирать Verdana, о которой теперь все знают (и X, и Xft). Но Opera почему-то выбирала Times New Roman, и только после того, как я поменял в её конфигурации шрифт в категории "Normal" с Times New Roman на Verdana, она начала правильно показывать ЖЖ. Но это, мне кажется, баг в Опере, т.к. я всё время был в author mode, где она обязуется использовать шрифты, прописанные на странице, а не указанные мной. Я не хотел бы оставлять Verdana в качестве дифолтного шрифта для всего веба! В общем, я потыкался, потыкался, но так это и не исправил и бросил, т.к. всё равно решил переходить на Mozilla Firebird.

В Мозилле всё было интерсней. Она с самого начала правильно показывала большинство сайтов, в том числе ивритские - но ЖЖ показывала плохо: слишком маленькие шрифты (и не уверен, что правильные). Попытка как-то это сконфигурировать внутри Мозиллы не очень удалась. После долгих мучений я обнаружил, что, во-первых, работают только выборы шрифтов в разделе кодировки "Western", хотя я смотрел при этом русские страницы в ЖЖ - но выборы шрифтов ни в кодировке "Cyrillic", ни в кодировке "Unicode" ничего не меняли. Western-то тут при чём? Это меня весьма удивило (баг? недоработка?). Во-вторых, в любом случае эти шрифты работают, только если включить опцию "Always use my fonts", и хотя это исправило показ ЖЖ более или менее, я опять-таки не хотел включать эту опцию для всего веба. Более того, проявился любопытный баг, о котором как-то писал jwz (не могу сейчас ссылку найти). А именно, предположим, что размер шрифта на странице указан в CSS (как обычно в ЖЖ), и потом я на этой странице пишу <font size=-1>. Тогда Мозилла берёт новый размер не относительно текущего размера шрифта с точки зрения CSS, а относительно какого-то дифолтного размера шрифта, который прописан у неё для HTML! И поэтому зачастую выходит, что после <font size=-1> текст становится больше размером, чем был до того. jwz писал о том, что он послал по этому поводу баг в Багзиллу, но разработчики Мозиллы закрыли его с тем основанием, что это, дескать, правильное поведение. И сейчас я это воочию наблюдал в ЖЖ.

Я уже отчаялся, но решил ещё напоследок разобраться с тем, как моя Мозилла общается с Xft. И обнаружилось, что никак: я установил Мозиллу через binary package Генту под названием mozilla-firebird-bin (обычно в Генту нет специальных отдельных пакетов для прекомпилированных программ, это - одно из исключений; это не значит, что в Генту всегда обязательно компилировать, просто обычно скомпилированный binary package используется в рамках того же пакета в дереве Portage Генту, просто с другими опциями), и там она скомпилирована и устанавливается с такими особыми опциями: она не использует Xft, но при этом не надеется на X в смысле использования True-Type шрифтов, а сама находит их и использует сама с помощью библиотеки FreeType (той же, что сидит в сервере X в виде модуля freetype, но эта Мозилла делает всё сама со стороны клиента, если я правильно понял). Я решил, что, возможно, из-за этого все проблемы, и решил скомпилировать Мозиллу заново из исходников, заставив её при этом использовать GTK2 и Xft2. После компиляции (которая заняла часа три, что ли) всё заработало отлично, шрифты сами собой стали показываться правильно, и, что совсем уже непонятно, исчез баг, связанный с <font size=-1>. Казалось бы, эта проблема должна сидеть внутри engine, обрабатывающей HTML, и не должна быть связана с шрифтами? Загадка (возможно, что какие-то другие опции при компиляции Мозиллы, отличные от опций прекомпилированного варианта, сыграли тут роль, но если так, то я не имею ни малейшего понятия, что это могли быть за опции).

Теперь в Mozilla Firebird всё просто замечательно, и я точно перехожу на неё. Сгружу сегодня всякие extensions, в первую очередь - для записок (notes), для Google searchbar, и для mouse gestures, а насчёт других посмотрим уж. Осталось только одна проблема с шрифтами, которая, тем не менее, сильно мне мешает: очень плохо рендерится текст на тёмном фоне (это верно как в Мозилле, так и в программе-терминале, например). Скажем, если я захожу в какой-то дневник в ЖЖ, в котором стиль сделан так, что всё показывается на чёрном фоне, то я просто с трудом вижу буквы, они слишком тонкие, а также неровно тонкие (т.е. заметно, что некоторые палочки толще других, и из-за этого теребит в глазах всё время). Я не знаю, что с этим сделать - я пытался играться с опциями anti-aliasing, но это не очень помогло. Менять дифолтные шрифты? Но на какие? Проблема ли это именно True-Type шрифтов, связано ли это как-то с Xft? Если кто-то знает, как можно этому помочь, отзовитесь.

Рука бойцов писать устала. О клавиатуре, настройке раскладок и выборе мейлера - в другой раз.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 27 comments