02.09.2011

Настройка TV-тюнера PixelView PV — BT878P+ FM.RC

Выглядит этот TV-тюнер следующим образом:

PixelView PV — BT878P+ FM.RC

и с другой стороны:

PixelView PV — BT878P+ FM.RC

Настраивается одной командой:

sudo echo "options bttv card=72 tuner=23 radio=1" > /etc/modprobe.d/bttv.conf

22.03.2011

GRUB 2: Парольная защита загрузки Linux в режиме восстановления

В Ubuntu Lucid загрузка Linux в режиме восстановления настроена по умолчанию так, что доступ к учетной записи root не требует авторизациии. Кроме того, разрешено свободное редактирование любого пункта меню загрузки. Исправить ситуацию можно настроив в GRUB 2 аутентификацию.

Назначим имя и пароль суперпользователя GRUB 2, добавив следующий текст в конец файла /etc/grub.d/00_header:

cat << EOF
set superusers="user1"
password user1 password1
EOF

Суперпользователь (в нашем случае — user1) имеет возможность загружать и редактировать любой пункт меню GRUB 2, а также работать с GRUB 2 в режиме командной строки. Без прохождения аутентификации эти действия становятся невозможны.

В файле /etc/grub.d/10_linux заменяем этот фрагмент:
printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

на следующий:

if ${recovery} ; then
  printf "menuentry '${title}' --users user1 ${CLASS} {\n" "${os}" "${version}"
else
  printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
fi

Таким образом мы разрешаем загрузку режима восстановления (recovery) только пользователю user1.

GRUB 2 поддерживает хранение пароля в виде хэша (алгоритм PBKDF2). Сформировать такой хэш можно при помощи программы grub-mkpasswd_pbkdf2, которая запрашивает пароль и отдает его хэш в стандартный вывод (более двухсот символов заменено на многоточие для удобства отображения).

Enter password:  
Reenter password: 
Your PBKDF2 is grub.pbkdf2.sha512.10000.9290F727ED06C38BA4549EF7DE25CF5…

В случае использования PBKDF2-хэша пароля, запись для пользователя user2 в файле /etc/grub.d/00_header будет выглядеть так:

password_pbkdf2 user2 grub.pbkdf2.sha512.10000.9290F727ED06C38BA4549EF7DE25CF5…

Заметка основана на этом руководстве и этой статье.

19.09.2010

Мультизагрузка, GRUB 2 и LVM

Дважды в год мне приходится организовывать на компьютере двойную загрузку — очередной и предыдущей версий Ubuntu. Ситуацию осложняет то, что корневой раздел я традиционно размещаю в системе LVM, соответственно под /boot выделен отдельный раздел, а установщик Ubuntu при работе затирает его содержимое (с фатальными для загрузки предыдущей версии последствиями).

Наиболее удобным мне кажется следующее решение:

  1. Содержимое /boot копируется с отдельного раздела в соответствующий каталог корневой файловой системы.
  2. Строка для /boot удаляется из /etc/fstab уже установленной версии Ubuntu. Также из системы удаляется системный загрузчик.
  3. Устанавливается новая версия Ubuntu. Загрузочный раздел используется под /boot уже ею. GRUB 2 при установке автоматически формирует строку для загрузки старой версии Ubuntu.

14.03.2010

Заголовки партитур в LilyPond

Сформировать заголовок партитуры в LilyPond можно следующим образом:
\version "2.12.1"
\pointAndClickOff
\book{
  \paper {indent = 0}
  \header {
      dedication  = "Посвящение"
      title       = "Название"
      subtitle    = "Подзаголовок"
      subsubtitle = "Подподзаголовок"
      poet        = "Имя ПОЭТА"
      instrument  = "Название инструмента"
        %Центрируется под подподзаголовком. Кроме того, центрируется вверху 
        %каждой последующей после первой страницы.
      composer    = "Имя КОМПОЗИТОРА"
      meter       = "Meter string"
        %Выравнивается по левому краю под именем поэта.
      arranger    = "Имя АРАНЖИРОВЩИКА"
      piece       = "Название пьесы"      %Эти два параметра отображаются для
      opus        = "Название сочинения"  %каждого \score{}, если там не указаны
                                          %собственные значения.
      %breakbefore      = This forces the title to start on a new page 
      %(set to ##t or ##f).
      copyright        = "© Уведомление об авторском праве"
      %Центрируется внизу первой страницы.
      tagline           = "Подзаголовок"
      %Центрируется внизу последней страницы.
  }
  \score {
    \relative c'' {
      \tempo "Slowly and tenderly" 4.=54 
      c4
    }
    \header {
      %piece = "Название пьесы 1"      %Эти два параметра подавляют аналоги из 
      opus  = "Название сочинения 1"  %главного блока \header{} если заданы здесь.
        % Остальные параметры будут подавлены в любом случае.
    }
  }
  \markup {
      Необязательный текстовый блок
  }
  \score {
    {\tempo "Allegro" 4=120 
      c'4
    }
    \header {
      piece = "Название пьесы 2"      %Эти два параметра подавляют аналоги из 
      %opus  = "Название сочинения 2"  %главного блока \header{} если заданы здесь.
        % Остальные параметры будут подавлены в любом случае.
    }
  }
}
После компиляции этого кода получится следующий результат:
Обычное заполнение полей заголовков
В случае, когда пользователю необходимо отображение, отличное от предоставляемого (например, сведения о композиторе необходимо отобразить в несколько строк), он может воспользоваться более сложным синтаксисом:
\version "2.12.1"
\pointAndClickOff
\book{
  \paper {indent = 0} % Убираем "красную строку" во всем документе.
  \header {
      dedication  = \markup \fill-line {"Посвящение" "Еще одно посвящение"}
      title       = \markup \column \center-align {"Название произведения" "в несколько строк"}
      subtitle    = \markup \fill-line {" " "Подзаголовок"}
      subsubtitle    = \markup \fill-line {"Подподзаголовок" " "}
      poet        = \markup \left-align \center-column {"Город" "Имя ПОЭТА" "Год"}
      instrument  = "Название инструмента"
      composer    = \markup \right-align \center-column {"Город" "Имя КОМПОЗИТОРА" "Год"}
      meter      = \markup {Slowly and tenderly (\teeny \note #"4." #1 = 54) }
      arranger    = \markup \right-column {"Город" "Имя АРАНЖИРОВЩИКА" "Год"}
%     tagline     = ##f %Если не указать tagline выводится значение по умолчанию: 
%                         "Music engraving by LilyPond 2.12.1—www.lilypond.org"
  }
  \score { \relative c'' { c4 } }
}
После компиляции этого кода получится следующий результат:
Необычное заполнение полей заголовков
В принципе, штатное использование полей заголовка не обязательно. Здесь находится соответствующая страница официального руководства пользователя LilyPond.

04.01.2010

Общесистемная настройка шрифтов

Мне не нравится то, как по умолчанию выглядят шрифты в Ubuntu. Напротив, мне нравится, как выглядят шрифты Monotype, используемые маленькой фирмой, производящей мягкие окна.

Команда
$ aptitude install ttf-mscorefonts-installer
с последующей доводкой напильником gnome-appearance-properties (Система → Параметры → Внешний вид → Шрифты), решает проблему лишь частично — в firefox, например, также необходимо указать три варианта шрифта, причем, желательно, для каждого языка.

Кроме того, шрифтовые предпочтения других пользователей обслуживаемых мною машин совпадают с моими. Соответственно, хочется назначить начертания шрифтов глобально.

Для исполнения этого желания достаточно использовать пару файлов:

  • /etc/fonts/local.conf для общесистемных настроек;
  • ~/.fonts.conf для настроек пользовательских.

Содержимое этих файлов прекрасно описано здесь, однако свою версию /etc/fonts/local.conf я приведу:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Настройки отображения шрифтов по умолчанию -->
<match target="font">
  <edit mode="assign" name="rgba"><const>none</const></edit>
  <edit mode="assign" name="hinting"><bool>false</bool></edit>
  <edit mode="assign" name="hintstyle"><const>hintfull</const></edit>
  <edit mode="assign" name="antialias"><bool>true</bool></edit>
  <edit mode="assign" name="autohint"><bool>false</bool></edit>
</match>
<!-- Включить hinting, выключить antialias для мелких шрифтов -->
<match target="font">
  <test compare="less_eq" name="pixelsize" qual="any"><double>17</double></test>
  <edit mode="assign" name="hinting"><bool>true</bool></edit>
  <edit mode="assign" name="antialias"><bool>false</bool></edit>
</match>
<!-- Включить antialias для полужирных шрифтов среднего размера -->
<match target="font">
  <test compare="more_eq" name="pixelsize" qual="any"><double>15</double></test>
  <test name="weight" compare="more"><const>medium</const></test>
  <edit name="antialias" mode="assign"><bool>true</bool></edit>
</match>
<!-- Назначить предпочтения в семействах шрифтов
(шрифты Monotype предпочтительнее всех) -->
<alias>
  <family>serif</family>
  <prefer>
    <family>Times New Roman</family>
    <family>Liberation Serif</family>
    <family>DejaVu Serif</family>
    <family>Thorndale AMT</family>
    <family>Luxi Serif</family>
    <family>Nimbus Roman No9 L</family>
    <family>Times</family>
  </prefer>
</alias>
<alias>
<family>sans-serif</family>
  <prefer>
    <family>Arial</family>
    <family>Liberation Sans</family>
    <family>DejaVu Sans</family>
    <family>Verdana</family>
    <family>Helvetica</family>
    <family>Albany AMT</family>
    <family>Luxi Sans</family>
    <family>Nimbus Sans L</family>
  </prefer>
</alias>
<alias>
  <family>sans</family>
  <prefer>
    <family>Arial</family>
    <family>Liberation Sans</family>
    <family>DejaVu Sans</family>
    <family>Verdana</family>
    <family>Helvetica</family>
    <family>Albany AMT</family>
    <family>Luxi Sans</family>
    <family>Nimbus Sans L</family>
  </prefer>
</alias>
<alias>
  <family>monospace</family>
  <prefer>
    <family>Courier New</family>
    <family>Liberation Mono</family>
    <family>DejaVu Sans Mono</family>
    <family>Cumberland AMT</family>
    <family>Luxi Mono</family>
    <family>Nimbus Mono L</family>
    <family>Courier</family>
  </prefer>
</alias>
</fontconfig>

За способ включения сглаживания у полужирных шрифтов спасибо жижеюзеру sb0y.

UPD: Добавляю ссылки на отличное описание опций и виртуозный пример управления отображением шрифтов.

12.12.2009

Иллюстрация текста нотами

Продемонстрирую метод включения в текстовый документ нотных вставок на примере файла example.lytex следующего содержания:

\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\begin{document}
\title{Короткий документ, демонстрирующий совместное использование 
LilyPond и \LaTeX{}}
\date{}
\maketitle

При необходимости, можно иллюстрировать нотами тексты, подготовленые в \LaTeX{}:

\begin[fragment]{lilypond}
\relative c'' { \time 2/2 a2 g16 a g f d8 f a4 c a c}
\end{lilypond}

Существует более компактный, но менее наглядный и функциональный вариант
синтаксиса:

\lilypond[fragment]{\time 2/2 a'2 g'16 a' g' f' d'8 f' a'4 c'' a' c''}

Описываемый метод позволяет включать в текст большие блоки нотной записи,
причем разбивка на строки происходит автоматически:

\lilypondfile{example.ly}

У метода есть проблема, решения которой я пока не нашел "--- \LaTeX{}
подавляет русские буквы, используемые LilyPond (в частности, для отображения
текстов песен).
\end{document}

Как видите, к этому файлу подключен файл example.ly для пакета LilyPond, содержимое которого я тоже приведу:

\version "2.10.33"
\score { \relative c'' {
\time 2/2 a2 g16 a g f d8 f a4 c a c
          a2 g16 a g f d8 f a4 d a d
          ais4 e16 g ais d e4 g,16 a cis e f4. d16 f d2
          ais4 e16 g ais d e4 cis d2 \bar "|."
} }

Одним из результатов запуска команды
$ lilypond-book --pdf example.lytex
будет файл example.tex, который можно обрабатывать обычным образом:
$ pdflatex example.tex

Результат (example.pdf) соответствует ожиданиям:


Существует документация (на английском) к LilyPond вообще и его интеграции с LaTeX в частности.

UPD: Похоже, $ aptitude install cm-super решает проблему подавления pdflatex-ом русских букв, используемых lilypond-ом.

17.10.2009

Санскрит

Устанавливаем поддержку языка и шрифты:
$ aptitude install latex-sanskrit

Далее создаем файл sanskrit.skt примерно такого содержания:

\documentclass[12pt]{article}
\usepackage[larger]{skt}
\begin{document} {\skt ddhrya}
\end{document}

Пропускаем его через препроцессор skt (входит в комплект пакета):
$ skt sanskrit.skt

На выходе получаем sanskrit.tex, с которым поступаем обычным образом.

Результат:


Препроцессор можно не использовать, тогда не будут задействованы лигатуры и прочие возможности пакета.

Вот результат без использования препроцессора:


Документация к пакету — /usr/share/doc/latex-sanskrit/sktdoc.pdf.gz

По желанию можно использовать пакет texlive-lang-indic, например, так.

Отличия — в препроцессоре, TeX-пакете и, естественно, в направленности на живые языки Индии.