25 января 2009 в 01:52

Включение сглаживания шрифтов в wine

Как многим из вас уже известно, начиная с версии 1.1.12 wine поддерживает сглаживание шрифтов, включая субпиксельное. Однако по умолчанию это сглаживание выключено. Для его включения нужно пошаманить с реестром в wine. Но есть способ проще:

Я написал небольшой скрипт (английская версия), с помощью которого можно включить/выключить сглаживание, при этом выбрать какой именно режим сглаживания вам нужен:



Быстро загрузить и запусть его можно так:
wget http://files.polosatus.ru/winefontssmoothing.sh
bash winefontssmoothing.sh
Скрипт также вполне корректно поддерживает указание WINEPREFIX.
Игорь Тарасов @TiGR
карма
107,3
рейтинг 0,0
Похожие публикации
Самое читаемое Администрирование

Комментарии (30)

  • +6
    Скрипты это тру. Заодно wine поставил свежий. Да прибудет с Вами Сила!
    • +2
      Куда прибудет? )
      • 0
        Как куда? В клетки организма посредством мидихлориан. )
  • +1
    Довольно красиво получилось.
  • +1
    спасибо конечно, только я не понял, версия 1.1.13, убунту, но почему то разницы не заметил.
    • +1
      Разница заметна на более крупных размерах текста.
      • +2
        А я заметил =) глазомеру приятно =) алаверды!
      • 0
        да, на 48 размере кое как заметил увеличив через компиз
  • +3
    die "Wine не обнаружен. Он точно установлен? ($WINE)"

    die — это какой-то perl-изм, но никак не bash-изм

    bash как бы говорит: die: command not found
    • 0
      Ой! Спасибо, поправил. Так лучше?
      • +6
        Продолжем bash-линч:

        Вместо «which» можно использовать bash-евый built-in «type».
        Плюсы:
        Не надо дёргать диск, чтоб запустить /usr/bin/which.
        Не надо удостоверяться в том, что which вообще установлен. Например, в gentoo это отдельный пакет, т.е. which даже в coreutils не входит.

        Вместо статически заданного имени временного файла лучше использовать нечто, сгенерированное с помощью mktemp. Представте, что текущая директория /tmp (логично скачать сюда одноразовый скрипт) и злоумышленник создал симлинк .wfscfg.tmp -> /home/user/.ssh/id_rsa
        Ну или банальнее — кто сказал, что у пользователя есть доступ на запись в текущую директорию?

        Еще вот такое замечание:
        -if [[ $STATUS = 255 || $STATUS != 0 ]]
        +if [[ $STATUS != 0 ]]

        Выражения-то эквиваленты.

        ORIENTATION неплохо определить автоматом — я вот не хочу вглядываться с лупой в субпиксели, ну или по крайней мере брать его из текущих настроек. Хорошего способа узнать текущие настройки без парсинга fonts.conf мне не известно, парсить можно через libxml2, которая стоит почти повсюду. Пример можно посмотреть тут — darkk.net.ru/home/bin/brainbench-update.sh
        • 0
          Спасибо за подсказки. Обновил файлы. С последним правда непонятно. Пока пытаюсь откопать какие-то детали.
          • 0
            Я бы начал с /etc/fonts/fonts.conf и далее вглубь по include-директивам.

            Согласен, парсить XML на bash — то еще удовольствие, но XPath довольно прост, а xmlstarlet позволяет упросить процесс геренации XSL-преобразований по XPath запросам =)
            • 0
              Уже понимаю, что подобные извращения лучше делать на чём-нибудь другом (типа perl, python или ruby), но извлечение параметров из .fonts.conf удалось написать при помощи sed :) Как-то так:
              cat ~/.fonts.conf | tr -d '\t\n\r ' | \
              sed 's/^.*name="rgba"[^>]*><const>\(\w*\)<.*$/\1\'
              Сам понимаю, что страшно, но зато работает %)

              И xmlstarlet по умолчанию не установлена в ubuntu.
        • 0
          Тут Денис Орехов попросил указать, что код
          if [ -x "`type -t $WINE`" ]
          не работает.

          Что не удивительно, т.к.
          $ echo `type -t wine`
          file

          Вообще, в help type подробно расписано, что да как.
          • 0
            Оно работает и должно работать (хотя логика несколько витиевата, да %) ). Но чтобы было уж совсем хорошо поменял на:
            if [ -z "`type -p $WINE`" ]
            • 0
              Не должно, т.к. в текущей директории нет исполнимого файла «file». Или работает какая-то другая логика?
              • 0
                А там проверяется не только текущая директория. Но и /usr/bin, а там такой файл есть. Я же говорю, логика витиеватая ;)
                • 0
                  test -x проверяет текущую директорию, а не весь PATH
                  darkk@thinkpad ~ $ ls file
                  ls: cannot access file: No such file or directory
                  darkk@thinkpad ~ $ test -x file && echo exists || echo fail
                  fail

                  Зачем так сложно делать, когда можно просто проверить $? после type — я не вполне понимаю, но это уже детали :-)
  • 0
    Попробовал ваш скрипт. Думал решит мою давню проблему:


    С английскими буквами тоже самое, так что дело не в шрифте. Если в настройках КДЕ отключить сглаживание, то в приложения на Qt появляется тоже такая беда. Поэтому подумал, что включение сглаживания для wine мне поможет.

    Есть варианты, как это побороть?
    • 0
      Я подозреваю нужно
      1) ставить системные шрифты (Bitstream Vera и похожие)
      2) добавлять их и вообще посмотреть /etc/X11/xorg.conf
      3) пересобрать freetype c включенным Bytecode Interpreter
      4) Ну и подправить ~/.fonts.conf там есть опции для выбора субпиксельного/ оптимизации для Lcd/crt
      будет все гут
  • 0
    Интересно, есть ли а в q4wine такая настройка…
  • 0
    Отлично работает, спасибо!
  • 0
    Пробовал шаманить с реестром — ничего не заработало… Но скрипт помог)
  • 0
    Волшебно, мерси :)
  • 0
    У Wine недавно появилась какая-то утилита по настройке Вайна из GUI. Отправьте им код, такие вещи лучше и удобнее использовать из одного места.
    • 0
      winecfg существует не недавно, а давным-давно. Только оно написано на C. Совсем не понимаю как им может пригодится bash скрипт.
  • 0
    активировал скриптик…
    ubuntu/8.04
    использую ies4lin и IE6 для тестирования,
    после включения скрипта и активации сглаживания
    в IE перестали отображаться некоторые картинки (невидимые)
    выключил сглаживание аналогично.
    времени разбирать, что делал скриптик нет, вот и сижу бью себя по рукам (сколько раз говорил нельзя пускать не посмотрев)
    • 0
      По идее, оно не должно так влиять. Если влияет, то это явно баг wine, возможно есть смысл сообщить разработчикам.

      А пока попробуйте запустить редактор реестра и в HKEY_CURRENT_USER\Control Panel\Desktop удалить все значения, которые начинается на FontSmoothing. Если это поможет, то это определённо баг wine. Если не поможет, то копать надо где-то в другом месте, возможно вы в последнее время ещё что-то меняли.
  • 0
    Я поговорил с Скоттом Ричи (который делает упдейты вайну в убунте и работает над её интеграции), он об етом не знал — посоветовал репорт сделать для будущего: bugs.winehq.org/show_bug.cgi?id=17148

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.