7 июня 2011 г.

Яркость экрана ввода пароля GDM

После того, как я поставил на свой ноутбук графический дисплейный менеджер GDM (он же GNOME Display Manager), чтобы удобно переключаться между оконными менеджерами (обычно пользуюсь IceWM, но решил параллельно поставить Fluxbox, GNOME и KDE --- чисто понастраивать и поиграться), возникла одна проблема. При загрузке экрана ввода пароля, в случае, когда ноутбук работает от сети, яркость экрана сбрасывается на максимум. Функциональными клавишами она, конечно, выставляется, но лишь до следующей перезагрузки.

Решение я нашел на http://ubuntuforums.org/ вот в этой теме: GDM Brightness

Приведу два основных сообщения:

Вопрос: от 31 июля 2009
redsky1302
My laptop running jaunty has some curious brightness behaviour that I hope you guys can help me with. During the boot sequence, the initial brightness from bios all the way to GRUB is fine. However, during the ubuntu splash (the one with the status bar), the brightness suddenly goes to maximum and remains that way. When I log in, the brightness goes down to 5% (as I set it that way in the Power Management utility). If I log out, the brightness of the login screen correctly remains at 5%. My question is: Is there a way for me to set the initial brightness of ubuntu? I don't like that sudden surge of brightness during the boot sequence till I log in.

Ответ: от 4 мая 2010
swmail
To set the initial brightness of gdm you can use the command:
gksudo -u gdm dbus-launch gconf-editor

and set the key /apps/gnome-power-manager/backlight/brightness_ac to value 0..100

Те, кто знает английский и ОС Linux с окружением рабочего стола GNOME, наверно уже все поняли. Для остальных распишу подробнее.

В общих словах: нам надо установить яркость экрана ноутбука при работе от сети от имени пользователя gdm. Теперь рассмотрим как это сделать.

Во-первых нам нужны утилиты gksu (если запускаем из терминала, можно использовать просто sudo) и gconf-editor. Если Вы изначально ставили GNOME в полной конфигурации, то обе эти утилиты у Вас наверняка есть. Если же Вы ставили только базовый набор GNOME'а или, как и я, используете какой-то оконный менеджер, то их надо доустановить. Для этого можно воспользоваться пакетным менеджером Synaptic (или центром приложений Ubuntu) или утилитами aptitude и apt-get через терминал (речь, естественно, идет об операционных системах семейства Debian Linux, в других ОС используйте свои пакетные менеджеры). С первым вариантом вопросов возникнуть не должно: ищем в поиске эти пакеты и устанавливаем их. Поэтому, приведу команды для второго варианта:

Проверяем установлены ли эти утилиты:
$ aptitude search gconf-editor gksu | grep "i "

Если видим что-то вроде этого:
i   gconf-editor                    - редактор системы настроек GConf       
i A gksu - графическая оболочка к su
i A libgksu2-0 - library providing su and sudo functionalit

то эти утилиты уже у Вас установлены. Если же нет, то ставим их командой:
$ sudo apt-get install gconf-editor gksu

Запускаем gconf-editor от имени пользователя gdm следующей командой:
$ gksudo -u gdm dbus-launch gconf-editor

Вводим свой пароль, если потребуется, и получим на экране вот такое окно:


Теперь установим ключ /apps/gnome-power-manager/backlight/brightness_ac в нужное нам значение от 0 (минимальная яркость) до 100 (максимальная яркость). Я ставлю 40. На скриншоте показано где этот ключ находится.


Ну вот и все. Сохраняем, перезагружаемся и радуемся нормальной яркости экрана ввода пароля.

3 апреля 2011 г.

Русский язык в gnuplot (терминал postscript)

Проблема: При использовании терминала postscript gnuplot не желает читать русские символы в кодировке UTF-8.

Решение:

Посмотрим как все это безобразие с UTF-8 в терминале postscript выглядит на практике. Для этого я использую тест Этана Меррита, оригинальный текст которого лежит здесь.
#! /usr/bin/gnuplot -persist

set terminal postscript eps enhanced
set output "test.ps"
set encoding utf8

set label 100 at screen 0.5, 0.95 center
set label 100 "Dump all 7-bit characters and a selection of UTF-8 unicode characters\nCharacters that are missing from your current font will not appear in the output below\nOnly a portion of the characters on a unicode page are dumped"
#
set border 0
unset xtics
unset ytics
#
set label 101 "page 0 (Latin1)" at screen 0.05, 0.80
set label 102 "0020-0040:" at screen 0.05, 0.75
set label 103 "0041-0060:" at screen 0.05, 0.70
set label 104 "0061-007E:" at screen 0.05, 0.65
set label 105 "" at screen 0.05, 0.60
set label 106 "page 1:" at screen 0.05, 0.50
set label 107 "page 3:" at screen 0.05, 0.45
set label 108 "page 4:" at screen 0.05, 0.40
set label 109 "pages 33,34:" at screen 0.05, 0.35
set label 110 "pages 37,38:" at screen 0.05, 0.30
set label 111 "Japanese:" at screen 0.05, 0.25
set label 112 "Hebrew:" at screen 0.05, 0.20
#
set label 1 at screen 0.2, 0.80
set label 2 at screen 0.2, 0.75
set label 3 at screen 0.2, 0.70
set label 4 at screen 0.2, 0.65
set label 5 at screen 0.2, 0.60
set label 6 at screen 0.2, 0.50
set label 7 at screen 0.2, 0.45
set label 8 at screen 0.2, 0.40
set label 9 at screen 0.2, 0.35
set label 10 at screen 0.2, 0.30
set label 11 at screen 0.2, 0.25
set label 12 at screen 0.2, 0.20
#
#set label 1 "\001\002\003\004\005\006\007\010\011 \013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040"
set label 2 "\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100"
set label 3 "\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140"
set label 4 "\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177"
set label 5 "¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿" . "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑñòóôõö÷øùúûüýþÿ"
set label 6 "ĀāĂ㥹ĆćĈĉĊċČ茜ŜŝŞşŠšŴŵŶŷŸŹźŻżŽž"
set label 7 "αβγδεζηθικλμνξοπρςστυφχψωϑϖ"
set label 8 "абвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџ"
set label 9 "ℎℏℋℓℛÅ∀∂∃∇∈∋√∞∧∨∩∪∫⊂⊃⊆⊇⊥⊗⊙"
set label 10 "◎▲△▼▽☉☿♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑"
set label 11 "日本語フォント かな 漢字"
set label 12 "אבגדהוזחטיךכלםמןנסעףפץצקרשת"
#
set xrange [-1:1]
set yrange [-1:1]
plot -10 notitle


Как вы можете видеть, в тесте присутствуют как стандартные символы ASCII, так и символы в кодировке UTF-8 (в частности греческие и, наиболее нам интересные, русские).
Посмотрим, что получилось при запуске этого теста.


Получилось полное безобразие. Нет ни русского, ни греческого. О японском и иврите и говорить не приходится.

Решение, после долгих поисков, я нашел вот здесь. Пользователь Michael пишет:

> Для eps я использую // For eps I use:
> set terminal postscript eps enhanced color dashed adobeglyphnames

То есть, получается, что достаточно добавить в описание терминала опцию adobeglyphnames.

Добавляем:
#! /usr/bin/gnuplot -persist
set terminal postscript eps enhanced adobeglyphnames
set output "test.ps"
set encoding utf8

И проверяем:


Опа! У нас есть русский! К сожалению, остальные символы все-таки придется добавлять через {/Symbol __}

Но вообще, если есть необходимость использовать UTF-8, то лучше всего не использовать костыли, а взять какой-нибудь терминал, который поддерживает эту кодировку. Например pdfcairo.
Попробуем:
#! /usr/bin/gnuplot -persist
set terminal pdfcairo enhanced font "Helvetica,5"
set output "test.pdf"
set encoding utf8


Смотрим, что получилось:


А получилось великолепно. Есть и русский, и греческий, и, даже, иврит с японским и математическими символами. Так что лично я пока перехожу на pdfcairo. Благо PDF можно без проблем перегнать хоть в рисунок хоть в PS/EPS при помощи imagemagick.

31 марта 2011 г.

Кириллица cp1251 на флешке с FAT32

Проблема: При монтировании флешки, отформатированной как FAT16/FAT32, имена файлов, записанные кириллицей в кодировке cp1251, отображаются некоей абракадаброй.

Решение я нашел на форуме Русскоязычное сообщество Ubuntu Linux в теме KDE4 и кириллица смонтированных дисков. Поэтому за этот рецепт стоит сказать огромное спасибо товарищам romeg и NoOne с этого форума.

Собственно, само решение:

Все действия выполняются от имени суперпользователя (root).

1) Создаем файл /sbin/mount.mvfat
#!/bin/bash

dev=$1
mpoint=$(echo $2 | sed -e 's/\ /\\\\ /')
shift
shift
eval mount -t vfat $dev $mpoint $@,quiet,iocharset=utf8,codepage=1251,showexec,umask=0,flush


2) Делаем его исполняемым:
# chmod +x /sbin/mount.mvfat


3) Создаем файл /etc/hal/fdi/policy/10_my_fsops.fdi
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
    <device>
        <match key="volume.fstype" string="vfat">
            <match key="@block.storage_device:storage.hotpluggable" bool="true">
                <merge key="volume.fstype" type="string">mvfat</merge>
                <merge key="volume.policy.mount_filesystem" type="string">mvfat</merge>
                <merge key="volume.mount.valid_options" type="strlist">utf8</merge>
                <merge key="volume.mount.valid_options" type="strlist">shortname=</merge>
                <merge key="volume.mount.valid_options" type="strlist">codepage=</merge>
                <merge key="volume.mount.valid_options" type="strlist">iocharset=</merge>
                <merge key="volume.mount.valid_options" type="strlist">umask=</merge>
                <merge key="volume.mount.valid_options" type="strlist">dmask=</merge>
                <merge key="volume.mount.valid_options" type="strlist">fmask=</merge>
                <merge key="volume.mount.valid_options" type="strlist">uid=</merge>
                <merge key="volume.mount.valid_options" type="strlist">flush</merge>
            </match>
        </match>
    </device>

</deviceinfo>


Все! После этого, кириллица на флешке отображается правильно.

20 января 2011 г.

Настройка переключения раскладок в Ubuntu 10.04/10.10

Предисловие: В Ubuntu по умолчанию в качестве окружения рабочего стола используется Gnome (или KDE/Xfce, если вы используете KUbuntu/XUbuntu соответственно). В этих окружениях есть соответствующие апплеты, отвечающие за переключение раскладок и отображение где-нибудь на панели текущей раскладки. А вот если вы, как и я, устанавливаете Ubuntu с диска Alternate как "голую" консоль, а затем накатывате на нее какой-нибудь оконный менеджер (IceWM, OpenBox, FluxBox или какой-то еще из множества WM), то перед вами обязательно встанет проблема настройки переключения раскладок и отображения индикатора текущей раскладки. Этому и посвящен этот пост.


Настройка переключения раскладок:

В ОС Debian Linux для настройки параметров переключения раскладок необходимо править файл /etc/X11/xorg.conf. Что там надо написать написано к примеру здесь и здесь.
В Ubuntu по-умолчанию xorg.conf нет. Его можно создать, но параметры клавиатуры он почему-то у меня оттуда не берет. Ну и ладно, обойдемся и без него. Благо в Ubuntu он как правило и не нужен.

Для установки параметров клавиатуры в Ubuntu 10.04 используется улилита setxkbmap из пакета x11-xkb-utils.

Чтобы установить параметры клавиатуры прописываем в файл автозагрузки следующую команду:

setxkbmap -rules "evdev" -layout "us,ru" -variant "," -option "grp:caps_toggle,terminate:ctrl_alt_bksp"


Данная команда устанавливает английскую-американскую (us) и русскую (ru) раскладки. Переключение раскладок осуществляется клавишей CapsLock (сам CapsLock теперь активируется комбинацией Shift+CapsLock). Световой индикатор CapsLock'а теперь указывает на использование второй раскладки (в нашем случае --- это русская раскладка). Комбинация Ctrl+Alt+Backspace используется для закрытия X-server'a (по умолчанию в Ubuntu 10 эта возможность отключена).

Утилита setxkbmap должна запускаться от имени суперпользователя. Есть два решения:

  1. Прописываем в файл sudoers права на выполнение для этой программы /usr/bin/setxkbmap без пароля и запускаем ее через sudo

  2. Устанавливаем для утилиты бит SUID и прописываем всех пользователей в группу admin (пользователь, созданный при установке системы, уже находится в этой группе)
    # chmod u+s /usr/bin/setxkbmap
    # usermod -a -G admin username


Теперь у нас работает глобальное (для всей системы) переключение раскладок и даже есть индикатор активной раскладки в виде светодиода CapsLock. Но если вы используете более двух раскладок (например английскую, русскую и украинскую) или вам просто неудобно использовать световой индикатор, и вы хотите привычный индикатор на панели задач или в трее, то вам нужен индикатор текущей раскладки. Я в качестве индикатора раскладок использую xxkb, поэтому буду рассказывать именно про него.


Настройка индикатора/переключателя раскладок xxkb:

Вначале, как водится, надо этот xxkb установить:
# apt-get install xxkb


Теперь настроим его так, чтобы индикатор отображался в только в трее. Я при настройке использовал вот этот материал: ссылка. Но там, как оказалось, верно не все.

Чтобы все работало, как описано выше, приведите файл /etc/X11/app-defaults/XXkb к следующему виду (строки, не приведенные в листинге, остаются без изменения):
XXkb.image.path: /usr/share/xxkb

XXkb.mainwindow.enable: yes
XXkb.mainwindow.geometry: 15x15+985-31
XXkb.mainwindow.image.1: en15.xpm
XXkb.mainwindow.image.2: ru15.xpm
XXkb.mainwindow.image.3: su15.xpm
XXkb.mainwindow.image.4:
XXkb.mainwindow.label.font: -misc-*-r-*-20-*

XXkb.mainwindow.type: tray
! possible values - normal, top, tray, wmaker

XXkb.button.enable: no


Теперь прописывайте команду запуска xxkb в автозапуск вашего WM и наслаждайтесь работой.

Все.