Показаны сообщения с ярлыком настройка. Показать все сообщения
Показаны сообщения с ярлыком настройка. Показать все сообщения

20101012

Безболезненный upload с помощью Wondershaper

Наверное, многие замечали, особенно на домашнем интернете, что во время интенсивной закачивания данных в сеть (во время upload), соединение начинает «тормозить». Страницы сайтов подолгу не открываются, скачивание и медиапотоки подвисают на месте... Это легко измерить: у меня дома, например, пинг до гугла вырастает с 50 мс до порядка 1000 мс, при этом около 8% пакетов вообще теряются.

Причина этого явления (чаще всего) — загрузка в сеть занимает весь доступный исходящий канал, а соединения по протоколу TCP/IP требуют двухсторонней связи. Даже если мы пытаемся что-то просто скачать, машина должна посылать обратно пакеты подтверждения приёма (т.н. ACK). Если же исходящий канал весь занят, то и пакеты подтверждения, какими бы маленькими они не были, надолго задерживаются, и, соответственно, перестают приходить и входящие пакеты, даже если ширина входящего канала достаточна.

Решить эту проблему можно с помощью скрипта wondershaper (есть в составе большинства дистрибутивов). Он позволяет установить ограничения на скорость загрузки из сети и в сеть. Хитрость в том, чтобы вначале узнать свою реальную скорость соединения, а потом установить ограничения чуть-чуть ниже реальной доступной скорости. В этом случае будет всегда оставаться «запас» для своевременной передачи служебных пакетов, и задержки станут гораздо меньше.

Например, я хочу выложить кучу фотографий на яндекс-фотки. Иду на internet.yandex.ru и измеряю скорость соединения с Яндексом, сегодня вечером у меня получилось так:

Вниз: 4044 Кбит/с. Вверх: 490 Кбит/с.

Можно пойти на testspeed.net или другую измерительную страничку. Можно измерить вручную. Главное, получить реальные значения скорости в килобитах в секунду.

После этого надо включить wondershaper на используемом сетевом интерфейсе и указать ему значения немного меньше измеренных. Сетевой интерфейс — это обычно wlan0 в случае соединения по WiFi, или eth0 в случае соединения по локальной сети. Чтобы уточнить, можно выполнить команду route -n в терминале, имя используемого интерфейса искать в строке с флагами UG.

$ sudo wondershaper wlan0 3900 450


Готово. Запускаем загрузку в сеть (выкладываем фото, видео, раздаём торренты, и т.д.), измеряем время пинга. Чудесным образом, даже во время загрузки, пинг у меня упал до 61 мс, что не сильно больше его минимального значения при свободном канале, а веб-страницы стали скачиваться вполне шустро. Если не помогло с первого раза, можно попробовать ограничить скорость закачивания в сеть ещё сильнее.

Чтобы отключить wondershaper, выполнить:

$ sudo wondershaper clear интерфейс

20100913

Типографская раскладка в Линуксе

В блоге «Словомания» полезная заметка: Типографская раскладка в Линуксе. Оказывается, в свежих версиях есть уже готовая типографская раскладка, почти как раскладка Бирмана.

Типографская раскладка в Линуксе

Как включить: в параметрах раскладки клавиатуры включить «Клавишу для выбора 3-го уровня» (например, правый Alt). В списке «Разные параметры совместимости» — «Включить дополнительные типографские символы». Подробнее здесь.

По теме:

Ввод символов с акцентами в Linux
Как задавать произвольные Compose-последовательности

По-английски: Typography keyboard layout in Linux.

20100129

Автоматический учёт времени: Arbtt macht frei!

В линуксе есть несколько разных программок для учёта времени, самая простая и незамысловатая, и при этом вполне функциональная — это, пожалуй, Hamster. С ней всё понятно: добавляем на панель, вбиваем новое дело всякий раз, когда за него берёмся. Главное, не забывать.

А вот есть программка похитрее: arbtt. Пользоваться ей, правда, легче. Она полностью автоматическая. Достаточно запустить arbtt-capture и заниматься своими делами*. arbtt-capture будет записывать когда и какие программы были запущены и какие у окон были заголовки.

* Автор arbtt рекомендует сразу добавить arbtt-capture в автоматически запускаемые приложения.


Чтобы увидеть необработанные сырые данные, можно выполнить arbtt-dump, но это не очень полезно. Для просмотра статистики удобнее использовать использовать утилитку arbtt-stats.

Чтобы arbtt-stats могла выдавать осмысленные результаты, нужно вначале задать свою классификацию запущенных программ. Эти правила вписываются в файл ~/.arbtt/categorize.cfg. Пример и описание формата правил есть в документации. Приведу свой (сокращённый) пример с комментариями по-русски:
-- правила имеют вид:
-- [условие ==>] tag [категория_тега:]тег,
-- в условиях и тегах можно использовать несколько специальных переменных,
-- почти все они встречаются в примерах ниже

-- Не учитывать время простоя
$idle > 60 ==> tag inactive,

-- Все записи за последние 24 часа пометить тегом last-day
$sampleage <= 24:00 ==> tag last-day,
-- Пометить тегом last-hour все записи за последний час
$sampleage <= 1:00 ==> tag last-hour,

-- Все типы окон Firefox учитывать в одном теге program:web (program — это категория тега)
current window $program == "Navigator" ==> tag program:web,
current window $program == "firefox-bin" ==> tag program:web,
current window $program == "gecko" ==> tag program:web,
-- Общий тег для всех видов терминалов (на будущее)
current window $program == "gnome-terminal" ==> tag program:terminal,
-- Пометить все остальные программы пометить тегами вида program:имя_программы
tag program:$current.program,

-- Классифицировать заголовки Firefox с помощью регулярных выражений. Тут у каждого будут свои шаблоны.
-- Присваивать теги категории web.
current window ($program == "Navigator" && $title =~ /^Gmail.*/) ==> tag web:Gmail,
current window ($program == "Navigator" && $title =~ /.*Google Search.*/) ==> tag web:Google,
current window ($program == "Navigator" && $title =~ /^Twitter.*/) ==> tag web:Twitter,
current window ($program == "Navigator" && $title =~ /.* on Twitter - Iceweasel$/) ==> tag web:Twitter,
current window ($program == "Navigator" && $title =~ /^Springer.*/) ==> tag web:Papers,
current window ($program == "Navigator" && $title =~ /^Wiki - Editing.*/) ==> tag web:Papers,
-- ...
--
current window $program == "Navigator" ==> tag web:$current.title,

-- Теги категории time-of-day для классификации по времени суток
$time >= 2:00 && $time < 8:00 ==> tag time-of-day:night,
$time >= 8:00 && $time < 12:00 ==> tag time-of-day:morning,
$time >= 12:00 && $time < 14:00 ==> tag time-of-day:lunchtime,
$time >= 14:00 && $time < 18:00 ==> tag time-of-day:afternoon,
$time >= 18:00 && $time < 22:00 ==> tag time-of-day:evening,
$time >= 22:00 || $time < 2:00 ==> tag time-of-day:late-evening,

-- Помечать над каким проектом работаю судя по заголовку окна.
-- Присваивать теги категории project.
current window $title =~ m!~/work/projectA! ==> tag project:projectA,
current window $title =~ m!~/work/projectB! ==> tag project:projectB,
-- ...
--

-- Помечать, какой тип текста я редактирую судя по заголовку окна.
-- Присваивать теги категории edit.
current window ($title =~ /^[^ ]+\.c .* - G?VIM.*$/) ==> tag edit:c,
current window ($title =~ /^[^ ]+\.py .* - G?VIM.*$/) ==> tag edit:python,
current window ($title =~ /^[^ ]+\.hs .* - G?VIM.*$/) ==> tag edit:haskell,
-- Когда использую suduedit
current window ($title =~ m!.*\(/var/tmp\) - G?VIM.*$!) ==> tag edit:config,
-- Когда редактирую что-то онлайн в Its All Text
current window ($title =~ m!.*/itsalltext\) - G?VIM.*!) ==> tag edit:itsalltext,

Для отчёта по определённой категории:
$ arbtt-stats -c имя_категории
Для просмотра отчётов по всем категориям:
$ arbtt-stats --each-category
Для ограничения выборки только записями с определённым тегом, например, last-hour, есть опция -o. Всё вместе:
$ arbtt-stats -o last-hour -c program -c edit
Statistics for category program
===============================
_____________Tag_|___Time_|_Percentage_
program:terminal | 29m00s | 48.33
program:gvim | 17m00s | 28.33
program:web | 13m00s | 21.67
program:Pidgin | 1m00s | 1.67

Statistics for category edit
============================
_____________Tag_|___Time_|_Percentage_
edit:itsalltext | 17m00s | 28.33
edit:haskell | 4m00s | 6.67
(unmatched time) | 39m00s | 65.00
В последнем примере я показал примерный вывод программы. Сразу видно, сколько времени за последний час я что-то редактировал и что именно и какие программы использовал. Писал эту заметку, в общем.

Кстати, arbtt есть не только в линуксовых репозиториях, но в скором времени (а может и уже) будет доступна и пользователям Windows.

Некоторые замеченные изъяны: arbtt-stats при печати портит заголовки окон с уникодом (патчем на 20 строк исправляется, должно быть ОК при сборке новым GHC), пока нельзя классифицировать по дням недели или по месяцам, сообщения о синтаксических ошибках в правилах очень невнятны.

Дополнение: замеченные недостатки, не без моего скромного участия, исправлены во время Хакатона в Цюрихе; используйте GHC 6.12 и устанавливайте новую версию 0.5; там всё ОК.

Приятных всем выходных!

20090701

Как ускорить Firefox на eeePC 901

На моём eeePC 901 Firefox часто подтормаживал, и это явно совпадало с работой диска. Объяснение нашлось здесь.

Дело в том, что в eeePC 901 два флэш-диска, маленький на 4 ГБ и большой 16 ГБ, и этот большой флэш-диск — медленный. Домашний же раздел /home у меня, естественно, на большом, и там же профиль Firefox-а. Браузер же по-умолчанию сохраняет в него текущую сессию каждые 10 секунд и туда же пытается писать кэш. Пишет он синхронно (то есть ждёт, пока не запишется), поэтому и замирает на секунду при каждом чихе.

Народная медицина в этом случае рекомендует пойти в about:config и там

1) создать ключ toolkit.storage.synchronous с целым значением 0 (запись на диск вести асинхронно, то есть не ждать, пока, например, состояние сессии действительно запишется)

2) создать или изменить ключ browser.cache.disk.parent_directory, его строковое значение установить в /dev/shm/firefox-username (сохранять кэш в памяти, а не писать на диск; кэш, конечно, будет утерян при перезагрузке, и памяти потребуется больше, но зато и работать будет быстрее)

Дополнительно я увеличил промежуток времени между записями состояния сессии (списка открытых вкладок):

3) в browser.sessionstore.interval поставил 60000 (60 секунд), вместо 10000 (10 секунд).

Я попробовал — так явно лучше (iceweasel 3.0.6). Возможно, с кэшем есть и более красивые решения (сделать внутри профиля символическую ссылку куда-нибудь на быстрый диск, или какими-то другими ключами отключить дисковый кэш, увеличив кэш в памяти...). Можете оставлять в комментариях ссылки и рецепты.

Советы, полагаю, применимы не только к eeePC, но и к другим нетбукам с SSD (флэш-дисками).

В предыдущей заметке можно прочитать, как мы ставили и настраивали Debian на eeePC.

20090625

Metacity: сочетания клавиш, чтобы прижимать окна к краю

При всей любви и уважении к мозаичным оконным менеджерам, я пользуюсь традиционными перекрывающимися окошками. С мозаичными менеджерами на маленьком ноутбучном экране у меня обычно всё складывалось примерно так:

Первый экран — терминал во всю стену. Второй экран — браузер на 80% ширины, IM на 20% ширины. Остальные экраны — для остальных приложений (отдельный для Gimp, отдельный для полноэкранного плеера, и т.д.).

Итак, я на практике понял, что в основных рабочих приложениях удобно работать или в полноэкранном режиме, или поместив рядом два приложения. В двух этих случаях, кстати, мозаичность удобна. В остальных случаях, мозаичность иногда даже мешает. Однако для терминала во весь экран никакой мозаичности не нужно. Достаточно нажать F11 в Гноме (аналогичное сочетание клавиши где угодно). Остаётся случай «два окна рядом», одно справа, другое слева. Раз в день разложить так окна руками, конечно, можно.

Однако удобнее, когда есть клавиатурные сочетания. Во-первых, нужна максимизация по горизонтали и особенно по вертикали. Тогда окно сразу займёт всю ширину (или высоту) экрана, а для другого окна рядом останется место. Во-вторых, очень полезны сочетания, позволяющие подвинуть окно к краю экрана. С парой окон на экране и такими сочетаниями можно наслаждаться мозаичностью в любом оконном менеджере. В Openbox такие сочетания легко настраиваются, а вот в конфигураторе для Metacity (Gnome) — команд, чтобы прижать окно к краю, нет.

Так я думал и продолжал передвигать окна ручками. Одно влево, другое вправо. А сегодня узнал, что команды такие в Metacity есть. И сочетания клавиш к ним привязать можно в gconf-editor. Запускаем, идём в /apps/metacity/window_keybinding и там для команд move_to_side_x (где x — n, e, s, w) прописываем сочетания клавиш (строковое значение вида <Shift><Control>Up). Всё сразу работает.

сочетания клавиш для того, чтобы прижимать окна Metacity к краю экрана

С моим настройками я нажимаю Ctrl+Shift+F11, и окно вытягивается на всю высоту экрана. Нажимаю Ctrl+Shift+, и окно прижимается к правому краю. Другое окно вытягиваю и прижимаю к левому краю. На другом экране я запускаю терминал и нажимаю F11 (полный экран). Всё остальное, что собираюсь держать открытым дольше минуты (читалку PDF, плеер, и т.п.) запускаю на других экранах.

Примечание: при более внимательно рассмотрении оказалось, что прижимание окон к краю не только недокументированная, но и весьма глючная возможность в Metacity. Вот такой замечательный WM. В минималистичном Openbox, однако, всё ОК.

Кстати, полноэкранный терминал (без заголовков окон, без полосы прокрутки) — по-моему, ещё и идеальный полноэкранный редактор, то есть такая среда для работы с текстом, в которой ничего не отвлекает. То, что людям такая среда нужна — доказывает обилие специальных полноэкранных редакторов. А ничего специального не нужно: достаточно полноэкранного терминала и vi (или emacs). Вообще, полноэкранный режим чрезвычайно удобен, не только для терминала, но и для некоторых других приложений.

20090509

Подсветка табуляций между пробелами и концевых пробелов в Vim

Продолжаю тему вспомогательной подсветки в Vim. Прошлый раз писал как показать длинные (> 80 символов) строчки в Vim.

Другая зараза для исходного кода — концевые пробелы (trailing whitespace) и табуляции вперемежку с пробелами. Для их подсветки у меня в ~/.vimrc есть вот такие выделения:
" highlight trailing spaces
au BufNewFile,BufRead * let b:mtrailingws=matchadd('ErrorMsg', '\s\+$', -1)
" highlight tabs between spaces
au BufNewFile,BufRead * let b:mtabbeforesp=matchadd('ErrorMsg', '\v(\t+)\ze( +)', -1)
au BufNewFile,BufRead * let b:mtabaftersp=matchadd('ErrorMsg', '\v( +)\zs(\t+)', -1)
Первое включает подсветку любых пробелов на конце строки. Второе и третье подсвечивают табуляции, перед которыми или после которых есть пробелы. Понятно, что вместо * можно явно прописать типы файлов, для которых это должно работать, но единственное место, где мне это не нужно — это буферы со справкой. Поэтому у меня сделано сейчас так:
" disable matches in help buffers
au BufEnter,FileType help call clearmatches()
Выглядит это так:



Подобным же целям служат, но иначе работают, скрипт spacehi.vim и рецепт #396 (для подсветки пробелов).

20090505

Показать длинные (>80) строчки в Vim

Большинство программистов согласятся, что строчки кода должны быть короче 80 символов. Часто это просто хороший тон: читаем Linux Kernel Coding Style (80) , Style Guide for Python code (79), Good Haskell Style (79), Ruby Coding Conventions (80), Google C++ Style Guide (80)...

Практический вопрос: а как в Vim увидеть, что строка стала длиннее 80 символов? Это может быть очень полезно, если ширина окна больше 80. Простой и дубовый способ: 80| и курсор перемещается на 80-ю колонку. Однако каждую строчку так проверять неудобно.

Более элегантный выход — подсвечивать всё, что за 80-ю колонку вылазит. Сразу куча (похожих) рецептов: Highlight long lines.

Включить подсветку вручную:
:match ErrorMsg '\%>80v.\+'
Чтобы включать подсветку автоматически, каждый раз при открытии буфера, в ~/.vimrc помещаем:
:au BufWinEnter * let w:m1=matchadd('Search', '\%<81v.\%>77v', -1)
:au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
Должно работать в Vim после 7.1.40. При этом последние 4 символа до 80-й колонки будут предупреждающе подсвечиваться «поиском», а все, что после 80-й — «ошибкой».

Дополнение: в комментариях предложен ещё и другой способ выделить последние 4 символа строки:
:au BufWinEnter * let w:m1=matchadd('Search', '\%>76v.*\%<81v', -1)
Тоже работает.


Получается вот так:



Про подсветку табуляций вперемежку с пробелами и концевых пробелов см. следующую заметку.

20090421

Редактирование HTML и XML в Vim

Пару слов о редактировании HTML и XML файлов в Vim. О выделении HTML-тэгов я уже писал. Мне в конфигурации Vim по умолчанию не хватает
  • работающего % для перехода между парными тэгами (как обычно он переходит между парными скобками),
  • автоматического добавления закрывающих тэгов,
  • быстрого окружения тэгом выделенного фрагмента.
  • быстрого удаления окружающего тэга.
  • кодирования и раскодирования HTML Entities («>» как «&gt;» и обратно)
Почти всё это сразу есть в плагине xml.vim. Кроме HTML Entites, настроить кодирование которых тоже можно.

Установка и настройка

Cкачать файл xml.vim, сохранить в ~/.vim/ftplugin/xml.vim, сделать на него символическую ссылку с ~/.vim/ftplugin/html.vim. В ~/.vimrc включить загрузку плагинов по типам файлов:
filetype plugin on
Теперь при открытии XML и HTML файлов будет включаться этот плагин.

Для кодирования HTML Entities поместить в ~/.vim/plugin/ файл htmlesc.vim.

Использование

Переход между парными тэгами. Чтобы перемещаться между тэгами, поместить курсор внутрь тэга (например, на </div>), нажать %, курсор переместится к парному тэгу (т.е. к <div>).

Вставка закрывающих тэгов происходит автоматически при нажатии >. Таким образом, набрав <div> мы получим:
<div></div>
При желании, можно переназначить комбинацию для автодополнения тэга. Для этого в ~/.vimrc до загрузки плагина определяем переменную xml_tag_completion_map. Например, так:
let xml_tag_completion_map = ">>"
— в этом случае закрывающий тэг появится только при повторном нажатии на >.

Окружение фрагмента тэгом тоже сразу работает. Достаточно выделить фрагмент и нажать \x. Программа спросит каким тэгом окружить и аккуратно вставит и открывающий, и закрывающий тэги.

Удаление тэга — обратная операция. Нажимаем \d и ближайший окружающий тэг будет убран, но весь текст внутри тэга останется нетронутым.

В последних двух командах можно вместо \ назначить любую другую клавишу. Почитать документацию по плагину: :help xml-plugin.txt.

Кодирование и раскодирование HTML Entities. Для этого, напомню, мы используем скрипт ~/.vim/plugin/htmlesc.vim. Ctrl+h превращает нормальный текст в HTML («>» в «&gt;»), а Ctrl+u — обратно. Работает построчно.

Другие способы

Есть плагин closetag.vim. Он просто добавляет команду, закрывающую тэги, команда привязывается к сочетанию клавиш и вызывается вручную. Использовать просто: Ctrl+_ — закрыть текущий тэг, это удобно, когда его текст тэга уже написан. Этот плагин я тоже использую.

Есть отдельный скрипт, позволяющий окружать фрагменты текста тэгом. Примерно то же самое, что и \x в xml.vim.

По теме

Выделение HTML-тегов, строк и блоков кода в Vim
Как быстро закомментировать/раскомментировать блок кода в Vim

20090402

Дополнения к статье «eeePC 901 и Debian»

В декабрьскую статью про eeePC 901 и Debian добавил:

1) Замечания по поводу сборки ядра 2.6.29 в Debian. Кратко: хотя пакет этого ядра уже появился в репозиториях (sid), ставить его на eeePC 901 смысла нет, так как драйвер тачпэда Elantech в нём выключен, а поддержку WiFi-модуля RT2860 в Debian-ядре вообще выкинули по лицензионным соображениям (см. #522078 и #521553). Выход — собирать самим из исходников с kernel.org. К статье приложил свой конфиг ядра.

2) Пошаговые инструкции по пересборке свежей ALSA в виде пакета Debian. В общем-то, конкретизированное на примере повторение Debian Wiki. Учитывая, что нужная ALSA теперь есть в sid, пересобрать пакет несложно, а запись звука зато не будет ломаться при апгрейдах.

3) Пример настройки тачпэда Elantech. Раз уж собрали ядро 2.6.29 с его поддержкой, то почему бы дополнительными возможностями тачпэда не пользоваться?

20090317

Нормальный русский шрифт в Tk-приложениях

Обновление: запись частично устарела, python-tk 2.5 уже давно в Debian stable. Так что пересобирать пакеты самостоятельно теперь не надо.

Как известно, есть такая библиотека для графических интерфейсов, Tk. На Tcl/Tk легко писать скрипты с графическим интерфейсом. Так же Tk используется в качестве стандартной (доступной по умолчанию на всех платформах и не требующей установки) графической библиотеки в Python. Приложений написанных с использованием Tk довольно много. Раз читаете этот пост — значит, видели (смотрим, например, aptitude search ~Dpython-tk и aptitude search ~D^tk).

Однако русским пользователям Debian и Ubuntu с Tk явно не повезло. По умолчанию, из коробки, русские буквы в ней отображаются очень криво. Вот, к примеру простейшее приложение-однострочник:
$ echo 'button .b -text "привет, world!" ; pack .b ' | wish
и наблюдаем вот такой результат:



Хороших слов для таких шрифтов не находится. Такое ощущение, русские буквы берутся из какого-то китайского шрифта, при этом никакого сглаживания и хинтинга. Проблема настолько острая, что даже разобрана в LOR Wiki. В случае Tcl/Tk достаточно начать использовать Tk 8.5 вместо 8.4. В Debian/Ubuntu это делается так:
$ sudo update-alternatives --config wish 

Есть 3 альтернатив, которые предоставляют `wish'.

Выбор Альтернатива
-----------------------------------------------
* 1 /usr/bin/wish8.4
+ 2 /usr/bin/wish-default
3 /usr/bin/wish8.5

Нажмите enter, чтобы сохранить значение по умолчанию[*], или введите выбранное число: 3
Используется `/usr/bin/wish8.5' для предоставления `wish'.
Повторяем наш проверочный пример, и получаем вполне пристойный результат:



Понятно, что перед этим нужно поставить пакеты tcl8.5 и tk8.5. Это минутное дело.

Однако приложениям на Python, использующим Tk, вышеописанный фокус не поможет. В Debian (Lenny) и Ubuntu (Hardy, Intrepid) пакет python-tk собран с поддержкой только tk8.4, то есть по-умолчанию такие приложения выглядят вот так:



Чтобы это исправить, нужно поставить пакет python-tk собранный с поддержкой Tk 8.5. В Debian такой пакет есть, но только в experimental. Я скачал оттуда pytnon-tk 2.5.4-1 и нужный ему blt 2.4z-4 вручную и поставил. Никаких лишних зависимостей они не тянут, а Tk-приложения обретают новую жизнь:



В Ubuntu (Intrepid) ситуация похожая. Пакет python-tk собранный с Tk 8.5 повляется лишь в Jaunty. И сразу python-tk 2.6.1-0ubuntu1. Конечно, в таких случаях религия предписывает пересобирать пакет самостоятельно.

20090316

Wacom Bamboo Fun в Debian Lenny

Начну с приятного. Планшет Bamboo Fun* в Debian Lenny поддерживается, в смысле, что собирать самостоятельно драйвера Wacom не надо. Годятся дистрибутивные. У меня стоят соответственно пакеты wacom-tools и xserver-xorg-input-wacom версии 0.7.9.3-2.

* а вот владельцам Bamboo One, похоже, повезло меньше, судя по-всему им придётся установить драйвера самостоятельно, поддержка Bamboo One заявлена лишь начиная с wacom-tools 0.8.2.2


Однако для нормального использования, нужно внести настройки планшета в /etc/X11/xorg.conf. Во-первых, я добавил туда раздел ServerLayot, которого по-умолчанию там не было:

Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
InputDevice "Configured Mouse"
InputDevice "Generic Keyboard"

InputDevice "stylus" "SendCoreEvents"
InputDevice "eraser" "SendCoreEvents"
InputDevice "cursor" "SendCoreEvents"
InputDevice "pad"
EndSection


Во-вторых, добавил описания для все четырёх устройств ввода планшета (оба конца пера, указатель курсора и кнопки планшета).

Section "InputDevice"
Identifier "stylus"
Driver "wacom"
Option "Type" "stylus"
Option "USB" "on"
Option "Threshold" "10"
Option "Device" "/dev/input/wacom"
EndSection

Section "InputDevice"
Identifier "eraser"
Driver "wacom"
Option "Type" "eraser"
Option "USB" "on"
Option "Threshold" "10"
Option "Device" "/dev/input/wacom"
EndSection

Section "InputDevice"
Identifier "cursor"
Driver "wacom"
Option "Type" "cursor"
Option "USB" "on"
Option "Threshold" "10"
Option "Device" "/dev/input/wacom"
EndSection

Section "InputDevice"
Identifier "pad"
Driver "wacom"
Option "Device" "/dev/input/wacom"
Option "Type" "pad"
Option "USB" "on"
EndSection


После этого нужно перезапустить графическую подсистему («иксы»). Т.е., если используется графический экран входа в систему, то подключить планшет нужно ещё до появления этого экрана. Если курсор там управляется планшетом нормально — входить и работать. Если же планшет там не подхватился, то, не входя в систему, нажать Ctrl + Alt + Backspace. Графическая система перезапустится. После этого планшет должен уж точно подхватиться.

Внимание! Если планшет отключить (выдернуть из USB-порта), то придётся выходить из системы, чтобы он заработал опять. Не очень удобно, но так вот пока сделано... Зато работает и стёрка, и перо, и кнопки. В Убунту по-умолчанию планшет подхватывается сам, но чтобы заработала и стёрка, и кнопки, придётся всё равно сделать как в Debian.

После этого в используемом приложении (Gimp, Inkscape) нужно указать, какие устройства планшета надо включить. Конкретно в Gimp 2.4 нужно пойти в Файл, Настроить, Устройства ввода, Настроить дополн. устройства ввода. Далее последовательно выбрать все устройства планшета (stylus, eraser, cursor, pad) и включить каждое из них, установив режим «Экран» или «Окно». Нажать Сохранить.

Включить планшет в Gimp

Дополнительные возможности регулировки нажима кисти есть в новом Gimp 2.6, но в Debian Lenny старый добрый 2.4. В нём всё минималистично:

Настройки чувствительности кисти в Gimp 2.4

Утилитки wacomctl в Debian Lenny нет. Впрочем, может и к лучшему. Настроить параметры планшета и запрограммировать его кнопки можно из коммандной строки с помощью xsetwacom. Есть также графические утилитки Gnome Tablet Apps, которых в Lenny тоже нет, но поставить несложно. Выглядят они вот так:

Gnome Tablet Apps: регулируем чувствительностью планшета к нажатию

Однако вернёмся к не такой яркой, но универсальной утилитке xsetwacom. Ниже я расскажу, как регулировать чувствительность к нажатию. Для себя я описываю его «гаммой» нажатия. Гамма равная 1 соответствует настройке по умолчанию, гамма равная 2 соответствует очень сильной чувствительности к слабым нажатиям, гамма равная 0 соответствует очень слабой чувствительности к слабым нажатиям.

Параметры кривой чувствительности планшета вычисляются для данной гаммы длинной командой, которую я его сделал алиасом (pressgamma ниже). В ~/.bashrc поместил следующее:
alias pressgamma="awk 'BEGIN{ b=3.14*ARGV[1]*0.25; x=int(50*1.41*cos(b)); y=int(50*1.41*sin(b)); print x, y, 100-y, 100-x; }'"
function setwacomgamma { xsetwacom set stylus PressCurve `pressgamma $1` ; }
Теперь, посмотреть параметры кривой чувствительности для произвольной гаммы,
$ pressgamma 0.7
60 36 64 40
А установить нужную чувствительность планшета можно командой
xsetwacom set stylus PressCurve `pressgamma 1.2`
или просто
setwacomgamma 1.2


Дополнение. На сайте Wacom можно зарегистрировать свой планшет указав операционную систему Linux.

20090307

eeePC 901: переназначение курсорных клавиш, Shift и PageUp/PageDown

В продолжение к моей прошлой заметке об установке Debian на eeePC 901. Благодаря малым габаритам и скромному весу машинки я часто прихватываю с собой eeePC вместо полноразмерного ноутбука. Однако маленькие размеры имеют и изъян: клавиатура тоже маленькая.

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

1) клавиши PageUp и PageDown доступны только в комбинации с клавишей Fn, то есть требуют двух рук и лишнего пальца;
2) клавиша Shift укорочена, а там, где должна быть её левая часть, находится курсорная клавиша «вверх».

Вот схема этой раскладки по умолчанию:

eeePC 901: расположение клавиш по умолчанию

Поскольку два основных приложения для меня — терминал и браузер, и в обоих вкладки переключаются по Ctrl + PageUp/PageDown, и ими же или ими же с Shift я делаю прокрутку, то жать каждый раз Fn в другой части клавиатуры — неудобно.

Поэтому придумал я сделать так, чтобы нажимать PageUp/PageDown без Fn, а курсорные с Fn. Скрипт для xmodmap у меня такой:
! map PgDown/PgUp/Home/End to cursor keys
keycode 104 = Next
keycode 98 = Prior
keycode 100 = Home
keycode 102 = End
! map cursors keys to PgDown/PgUp/Home/End
keycode 105 = Down
keycode 99 = Up
keycode 97 = Left
keycode 103 = Right
И соответственно схема раскладки:
eeePC 901: PageUp/PageDown доступны без Fn
Попользовался, оказалось довольно удобно. Во всяком случае, в браузере и терминале. Если курсорные клавиши нужны редко. При использовании MPlayer, наверное, лучше оставить обычную раскладку.

Однако я по-прежнему продолжал иногда попадать мизинцем не в Shift, а в клавишу PageUp («вверх»), при этом курсор, естественно перескакивает на страницу вверх. Очень раздражает при наборе текста. Всё таки я, видимо, пользуюсь левым краем обычного Shift, тянуться ближе.

Соответственно, возникла идея вообще поменять Shift и PageUp местами. Соответственно, скрипт для xmodmap:
remove Shift = Shift_R
remove Control = Control_R

! remap PgDown/PgUp/Home/End/Shift
keycode 104 = Next
keycode 98 = Shift_R
keycode 100 = Home
keycode 102 = End
keycode 62 = Prior
! remap cursors keys and Control
keycode 105 = Down
keycode 99 = Control_R
keycode 97 = Left
keycode 103 = Right
keycode 109 = Up

add Shift = Shift_R
add Control = Control_R
Вроде работает. Раскладка получается такой:
eeePC 901: PageUp/PageDown доступны без Fn, Shift слева от кнопки PageUp

Как использовать: сохранить команды файл, и выполнить xmodmap файл-с-переназначением-клавиш. Чтобы применить постоянно, поместить команды в ~/.xmodmaprc. Я включаю их пока вручную, когда надо.

Если модель нетбука у вас другая, или другая клавиатура (мало ли, в другой стране купленная), то, наверное, лучше вначале посмотреть правильные коды клавиш с помощью утилиты xev, а уж потом соответствующим образом поправить команды.

20081215

eeePC 901 и Debian (установка и настройка)

У моей жены теперь появился eeePC 901. Эту модель выбрали в основном потому, что в ней сочетается ещё достаточно компактный размер и малый вес (при этом экран уже 1024×600), ёмкий аккумулятор и экономичный процессор (это один из наиболее автономных нетбуков), при этом цена вполне разумна. Выбрали жизнерадостный зелёный вариант исполнения с предустановленным Linux (в этом случае второй встроенный флэш-диск 16 ГБ, а не 8 ГБ, как в версии с Windows).

Вообще, надо отметить, что мы, конечно, с самого начала планировали ставить на него полноценный дистрибутив, но всё равно меня очень огорчила неполная работоспособность предустановленного Xandros.

Всё дело в том, что в 901, 1000 и 1000H Асус стал ставить модуль WiFi Realtek RT2860, драйвер к которому довольно сырой и требует проприетарной прошивки. Как результат, eeePC 901 из коробки просто не мог подключиться к открытой (!) точке доступа (тоже Асус, кстати). Такой хоккей нам не нужен. Более того, я теперь не удивляюсь, что им где-то там возвращают машины с Linux. Даже такая базовая для нетбука вещь как WiFi из коробки в новых 901 толком не работает, и не работает по вине производителя. Очень, очень стыдно, Асус, мы в тебя верили, а ты явно предпочитаешь модели без Linux! Одно отрадно: за лицензию Windows платить не пришлось, а проблема с WiFi решаема.

Так что почти сразу появился стимул поставить нормальный Debian. Сразу скажу, что с установкой системы моя жена справилась самостоятельно. Я только подсказал, как загрузочный образ debian-eeepc.img записать на флэшку:
0. посмотреть как называется устройство флэшки в выводе команды mount,
1. отсоединить том флэшки,
2. dd if=debian-eeepc.img of=/dev/устройство_флэшки,
3. sync
и подсказал ещё как лучше разбить диск (/ на первом флэш-диске, 4 ГБ, /home на втором, 16 ГБ, раздел для подкачки не создавали). Следуя рекомендации в Debian Wiki мы оставили два небольших раздела на первом флэш-диске. Вроде бы это ускоряет загрузку.

Для загрузки с установочной флэшки, нужно вставить флэшку, нажать ESC при перезагрузке устройства и выбрать устройство, с которого осуществлять загрузку. WiFi включается в BIOS (F2 при загрузке), это необходимо, если планируется ставить систему по беспроводной сети. Мы ставили по обычному Ethernet.

Основной источник информации при установке и настройке Debian на eeePC: Debian EeePC Wiki.

После установки почти всё сразу заработало. Ручного вмешательства потребовали только настройка sudo, WiFi и звук (микрофон). Засыпание/просыпание и видеокамера заработали сразу после установки. VGA-выход ещё не проверяли. Даже многопальцевые комбинации на тачпэде работают (хотя и не настраиваются, и мне кажутся непривычными после тачпэда synaptics). Bluetooth ещё не проверяли. Кардиридер работает.

sudo настраивается как обычно, запуском visudo от root-а, и добавлением строки
username ALL=(ALL) ALL
в файл /etc/sudoers. Другой вариант, раскомментировать строчку
%sudo ALL=NOPASSWD: ALL
а пользователя добавить в группу sudo.

Драйвер для WiFi доступен как на сайте производителя (Ralink), так и в репозитории
deb http://eeepc.debian.net/debian lenny main contrib non-free
Данный репозиторий подключается автоматически, если установка велась с указанного выше загрузочного образа.

После установки rt2860-modules-2.6.26-1-686 появляется возможность использовать сетевой интерфейс ra0. Разные способы настройки описаны здесь. Я же выбрал лёгкий путь и поставил wicd. Минутой позже я спокойно подключился к точке доступа с WPA2PSK.

Вообще, попробовал wicd я совсем недавно, и должен сказать, что это наиболее логичная и ясная графическая конфигурялка сети, которую я пока что видел. Устанавливается созданием файла /etc/apt/sources.list.d/wicd.list с указанием на сторонний репозиторий:
deb http://apt.wicd.net lenny extras
импортом ключей:
wget -q http://apt.wicd.net/wicd.gpg -O- | sudo apt-key add -
и после этого обычной установкой пакета wicd (с удалением NetworkManager). Запустить апплет wicd для панели Gnome: wicd-client.

Далее звук. Игрался он и так нормально, а вот с микрофона ничего не записывалось. Выяснилось, что поддержка Intel HDA Audio появилась в ALSA сравнительно недавно. Соответственно, нужно или ставить ядро 2.6.28-rc1 или более позднее, или собрать новую альзу самостоятельно. Мне было проще сделать второе.

Дополнение 2009-04-02. Несколько слов о сборке ядра 2.6.29 для Debian. Хотя пакет этого ядра уже появился в репозиториях (sid), ставить его на eeePC 901 смысла нет: драйвер тачпэда Elantech в нём выключен, а поддержку WiFi-модуля в Debian-ядре вообще выкинули по лицензионным соображениям (см. баги #522078 и #521553).

Короче, поступать в этой ситуации следует так:

1) не устанавливать готовых пакетов Debian, а взять исходники ядра на kernel.org и собрать пакет самостоятельно; при этом получив и поддержку тачпэда, и поддержку WiFi, и ядро, оптимизированное для настольных приложений — «из коробки»; постарался отключить всё лишнее, но явно отключил не всё. Конфигурацию ядра я частично позаимствовал отсюда. Основные особенности: CONFIG_PREEMPT=y (десктоп), CONFIG_RT2860=y (встроенный WiFi), CONFIG_MOUSE_PS2_ELANTECH=y (тачпэд Elantech), CONFIG_ATL1E (гигабитный Ethernet);

2) следовать инструкциям по сборке собственного пакета с ядром; если кратко, то переходим в каталог с распакованными исходниками ядра и делаем следующее:
$ make menuconfig
$ make-kpkg clean
$ nice -n +10 fakeroot make-kpkg --initrd --revision=eee901 kernel_image kernel_headers
Не забываем перед этим установить kernel-package и zlib1g-dev;

3) переходим на один каталог выше и устанавливаем собранные пакеты:
$ cd ..
$ sudo dpkg -i linux-headers-*.deb linux-image-*.deb

4) Перед тем, как перезагрузиться, не забываем пересобрать те модули, которые ставились из исходников. Например, пересобрать пользовательские модули ALSA из alsa-source можно так:
 sudo nice -n +10 m-a a-i -l 2.6.29 alsa
Хотя, кстати, с 2.6.29 я уже не уверен, что это нужно. Спросите экспертов;

5) после перезагрузки у меня вроде всё заработало (о настройке тачпэда см. ниже): WiFi, двухпальцевых скроллинг на тачпэде, звук и запись звука, видеокамера, кардридер, блутус (встроенный Bluetooth ещё не проверял, внешний USB-модуль работает), засыпание-просыпание, датчики батареи.


Для сборки альзы, вначале устанавливаем linux-headers:
sudo aptitude install linux-headers-`uname -r`
после чего можно скачивать исходники альзы. Исходники распаковываем, переходим в каталог с ними, делаем
$ ./configure --with-cards=hda-intel
$ make
$ sudo make install-modules
$ sudo ./snddevices
Конечно, не Debian-way, но работает. После установки драйверов из alsa-drivers-1.0.18a и перезагрузки заработал и микрофон, и регулировка громкости аппаратными клавишами.

Дополнение 2009-04-02: правильный для Debian способ заключается в пересборке пакетов ALSA. Тогда драйвера не будут затираться при каждом апгрейде ALSA в дистрибутиве. Конкретно в этом случае, если система Lenny (stable), а нужная версия доступна только в Sid (unstable), я поступил так:
1) добавил репозиторий исходников sid в /etc/apt/sources.list:
# sid source repository
deb-src http://ftp.debian.org/debian sid main contrib non-free
и вполнил sudo aptitude update.
2) во временном каталоге выполнил
$ apt-get -t sid source alsa-base
т.е. вытащил все исходники пакета alsa из репозитория sid. Затем скачал и установил все необходимые для сборки зависимости:
$ sudo apt-get -t sid build-dep alsa-base
Можно сохранить где-нибудь список, чтобы было проще удалить их потом. Наконец, перешёл в каталог с пакетом:
$ cd alsa-driver-1.0.19.dfsg/
Конкретная версия может отличаться.
3) Редактирую файл списка изменений
$ vi debian/changelog
На самом деле просто добавил «~backport1» к номеру версии. Новую запись в файле changelog делаю по образцу предыдущих (сохраняю отступы и количество пробелов). Время в нужном формате печатает команда date -R.
4) Пересобираю пакеты:
$ fakeroot dpkg-buildpackage -us -uc
Перехожу на каталог выше и устанавливаю все собранные пакеты:
$ cd ..
$ sudo dpkg -i linux-sound-base_1.0.19.dfsg-2~backport1_all.deb \
alsa-base_1.0.19.dfsg-2~backport1_all.deb \
alsa-source_1.0.19.dfsg-2~backport1_all.deb
Почти готово.
5) Осталось собственно собрать модули для текущей версии ядра. Для этого должен быть установлен пакет linux-headers и module-assistant. Тогда сборка и установка будет практически автоматической:
 $ sudo m-a a-i alsa
Всё. Теперь «правильная» альза должна быть установлена «правильным» способом. И пока в stable не появится более свежей альзы, будет использоваться «бэкпорт». При обновлении ядра нужно будет повторить только последний шаг (5). Чтобы новые модули заработали, нужно или выгрузить вручную все старые модули, которые начинаются на snd..., или просто перезагрузиться.


Аппаратные клавиши работают должным образом после установки пакета eeepc-acpi-scripts из указанного выше специального репозитория Debian для eeePC. Опять же, при установке со специального образа, он устанавливается по-умолчанию.

Ещё остаётся задача как следует настроить тачпэд. В 901 используется тачпэд Elantech. У меня он сейчас настроен как
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
EndSection
и он вроде работает. Кажется, только, иногда подтормаживает. Двумя пальцами делается вертикальная прокрутка и эмулируется средняя кнопка мыши, тремя пальцами эмулируется правая кнопка мыши, краткое касание второго пальца при удержании первого включает режим перетаскивания. Эти комбинации работают, но после тачпэда synaptics кажутся непривычными, и некоторые из них я бы отключил, особенно перетаскивание. На первое время я убавил чувствительность тачпэда в настройках Gnome.

Дополнение 2009-04-02: если было установлено достаточно свежее ядро с поддержкой тачпэдов Elantech (см. выше инструкции по установке ядра 2.6.29), то можно использовать нормальный драйвер тачпэда. Соответственно в /etc/X11/xorg.conf помещаем:
Section "InputDevice"
Identifier "Configured Mouse"
Driver "synaptics"
Option "Device" "/dev/input/mouse0"
Option "Protocol" "auto-dev"
Option "SHMConfig" "true"
Option "VertTwoFingerScroll" "1"
Option "HorizTwoFingerScroll" "1"
Option "TapButton1" "1"
Option "TapButton2" "2"
Option "TapButton3" "3"
EndSection
Кроме этого нужно установить xserver-xorg-input-synaptics версии не ниже 0.99.3. Готовые пакеты для Debian Lenny (stable) можно взять здесь. После перезапуска иксов, будет работать как вертикальный, так и горизонтальный скролинг двумя пальцами на тачпэде.

Подробности о настройке тачпэда смотрим в DebianEeePc Wiki.
Ссылки по теме:Народный опыт (*nix на схожих моделях):Впечатления о eeePC 901 в целом, как о железке, у меня очень приятные. Ничего не болтается, ладно всё подогнано. Вес и размер как раз такие, чтобы с ним было приятно сидеть где-нибудь на диване. Приятно сопротивление, с которым открывается и закрывается крышка. Клавиатура мелкая и чуть-чуть нестандартная, но если набирать аккуратно, то вскоре начинает получаться. От батареи работает действительно долго. Экран яркий, матовый, с широким углом обзора. Самое то. В разрешении же 1024×600 оказалось комфортно, особенно если использовать полноэкранный режим для ряда приложений (F11 в Gnome) и несколько рабочих столов. Только изредка приходится перетаскивать окошки с зажатым ALT.

Дополнение 2009-03-07: см. также мою следующую заметку, как переназначить курсорные клавиши, Shift и PageUp/PageDown на ееePC 901.

Дополнение 2009-04-02: дополнил описанием, как пересобрать пакеты ALSA для Debian stable, как собрать пакет ядра 2.6.29, как настроить тачпэд Elantech.

Дополнение 2009-07-01: в свежей заметке — как бороться с тормозами Firefox-а на eeePC.

Дополнение 2009-07-09: упомянул CONFIG_ATL1E (гигабитный Ethernet). Убрал ссылки на конфиг ядра, в котором его не было.

20081127

Подключаем сетевой принтер в GNOME

Задача: подключить сетевой принтер к клиентской машине. Предполагается, что используется GNOME в Debian/Ubuntu.

Решение:

1. Запускаем утилиту настройки принтеров (Система → Администрирование → Печать из меню GNOME или sudo system-config-printer).

2. Указываем отображать принтеры, подключенные к другим машинам (Сервер → Параметры в утилите настройки, ставим нужную галочку).



3. В появившемся списке принтеров выбираем принтер по-умолчанию (правой кнопкой из контекстного меню). Чтобы напечатать пробную страницу, дважды щёлкаем по принтеру, и в его свойствах выбираем «Пробная страница».



Вот, в общем, и всё.

20081112

Удалённое журналирование домашнего маршрутизатора

Матёрые сисадмины (я себя к ним не отношу) это и так знают, но простым пользователям это тоже может быть полезно. Бывает, что с домашней точкой доступа/маршрутизатором/DSL-модемом что-то случается и надо разобраться. Доступ к таким устройствам обычно только через веб-интерфейс. И даже если там включено журналирование, читать их журнал событий («лог») через веб-интерфейс не всегда удобно, да и время его хранения там не регулируется. К счастью, его можно перенаправить на нормальную GNU/Linux машину и сохранить в общем системном журнале.

Последовательность действий.

1. Включаем удалённое журналирование на маршрутизаторе. На моём Linksys-е, например, в веб-интерфейсе я выбираю Administration/Reporting/Syslog IP Address. Вводим IP-адрес своей машины. Чтобы узнать адрес своей машины:

$ ip addr | grep 'inet\>'

Понятное дело, что IP-адрес машины, сохраняющий журнал, предпочтителен статический, иначе придётся менять настройку каждый раз, когда меняется адрес.

2. На локальной машине, где будет писаться лог, требуем от syslog-а принимать логи от удалённых машин. Эта возможность по-умолчанию выключена, включается опцией -r при запуске сервера. В Debian-системах редактируем файл /etc/default/syslogd, и добавляем опцию в переменную SYSLOGD:

SYSLOGD="-r"


2б. Для удобства, можно прописать IP-адрес маршрутизатора в файл /etc/hosts, что-нибудь вроде

192.168.1.1 router

тогда в логах записи полученные с него записи будут помечаться именем «коробочки», а не её IP-адресом.

3. Перезапускаем syslogd:

$ sudo invoke-rc.d sysklogd restart


4. Журнал маршрутизатора теперь будет добавляться в /var/log/messages:

$ tail -f /var/log/messages | grep router
Nov 12 11:22:31 router secondary DNS address 193.70.152.25
Nov 12 11:22:31 router run_program(/etc/ppp/ip-up)

20080725

WiFi карточка D-Link DWL-G630 (RaLink RT2561/RT61 rev B 802.11g)

Достал из коробки лежащую уже с год без дела WiFi-карточку D-Link DWL-G630. lspci опознаёт её так:
07:00.0 Network controller: RaLink RT2561/RT61 rev B 802.11g
Вспомнил, что год назад нужно было скачивать драйвера с сайта Ralink и настраивать их весьма нестандартым способом. Детали, впрочем, забыл. За прошедший год ситуация несколько изменилась. Теперь (дистрибутивное ядро 2.6.24-1-686) при втыкании карточки автоматически подгружается модуль rt61pci, создаётся почему-то сразу два интерфейса ra0 (почему-то без wireless-extensions) и wlan0_rename. Честно говоря, я так и не понял, поддерживает ли этот драйвер rt61pci мою карточку в варианте «rev B» или нет…

В общем, скачал то, что называется улучшенный legacy driver, rt61, CVS-срез. В отличие от идущего с ядром rt61pci он не умеет работать с wpa_supplicant, но по моему прошлому опыту он точно поддерживает эту карточку. После распаковки архива с драйвером, перехода в rt61-cvs-2008072016/Module/, make и make install через минуту меня стал доступен новый драйвер rt61.

Поскольку в отличие от ситуации год назад настраивается он теперь вполне стандартными инструментами iwconfig и iwpriv, я удалил оставшийся от прошлогодних экспериментов каталог с его настройками /etc/Wireless.

Для работы карточки требуется установить также прошивки. Я просто поставил пакет firmware-ralink, и нужные прошивки легли куда надо (в /lib/firmware). Прошивки можно взять также отдельно с сайта Ralink.

После этого при втыкании карточки iwconfig стал показывать только один интерфейс ra0, а lsmod подтвердил, что автоматически грузиться rt61.

Дальнейшая настройка достаточно проста. Можно после втыкания карточки просто запускать графическую утилиту RutilT (есть в дистрибутиве), и в ней выбирать нужную сеть и вбивать пароль.

Можно и традиционно, из коммандной строки, используя iwconfig. Для настроек шифрования вместо wpa_supplicant с этим драйвером можно установить нужные параметры утилитой iwpriv (примеры есть в README к драйверу). Мне же хотелось, чтобы настройки определялись в традиционном для Debian /etc/network/interfaces, поэтому все нужные команды прописал туда. Моя точка доступа настроена на использование WPA2PSK с шифрованием AES (для WPAPSK/TKIP заменить на WPAPSK и TKIP соответственно). В этом случае настройки такие::
auto ra0
iface ra0 inet dhcp
pre-up iwconfig ra0 mode managed
pre-up iwpriv ra0 set AuthMode=WPA2PSK
pre-up iwpriv ra0 set EncrypType=AES
pre-up iwconfig ra0 essid "MYESSID"
pre-up iwpriv ra0 set WPAPSK="mypassword"
После этого беспроводная сеть стала подключаться автоматически, а также отключаться и подключаться по ifdown/ifup ra0. Мне бо́льшего и не надо :)

Если что, вот ветка форума, посвящённая обсуждению legacy-драйвера rt61 (pci).

20080612

Garmin GPSmap 60Cx: подключение и использование в Linux

Вчера стали обладателями вот такого устройства, GPS-навигатора Garmin GPSmap 60Cx:Устройство позволяет пользоваться загружаемыми векторными картами и имеет карточку памяти. Впрочем, все возможности ещё только предстоит научиться использовать. Карты надо научиться делать самим (те, что в продаже, стоят безумно дорого, но, главное, нормальных топографических карт нет, всё больше дороги…) — но это отдельная тема (кое-какие инструкции (1) уже (2) нашёл (3)). Вчера же вечером прокатились на велосипедах, чтобы записать тестовый трек, а после я пытался «подружить» это чудо со своим GNU/Linux. Ниже краткий конспект.

Подключается GPSmap 60Cx по USB (кабеля для подключения по последовательному порту в комплекте нет). Причём может подключаться в двух режимах: USB Mass Storage (ну с этим всё понятно, как флэшка, при отключении — устройство перезапускается) и по своему собственному протоколу (по умолчанию). Дальше я буду писать в основном про второй режим подключения.

Похоже, что в дистрибутивном ядре Debian (2.6.24-1-686) нужные драйвера garmin-gps уже включены, потому что сразу после подключения устройства dmesg выдаёт следующее:
usb 4-1: new full speed USB device using uhci_hcd and address 9
usb 4-1: configuration #1 chosen from 1 choice
garmin_gps 4-1:1.0: Garmin GPS usb/tty converter detected
usb 4-1: Garmin GPS usb/tty converter now attached to ttyUSB0

Из чего следует, что устройство подключается как /dev/ttyUSB0.

Передача точек маршрута (Waypoints) и треков (Tracks)

Вначале пробую программу gpsman. Интерфейс не сверхудобный, куча не связанных между собой окошек, между которыми приходится переключаться, кнопки, которые распахиваются в меню, но зато всё это дело работает! :)

Настройки потребовались минимальные: в главном окошке в диалоге Options указать GPS Model «Garmin» и Serial port «/dev/ttyUSB0». Всё, после этого в окошке GPS Reciever
— там, где написано offline нажимаем и выбираем check — надпись сменится на зелёную online, а кнопки внизу станут активные. Именно эти кнопки и надо использовать чтобы скачивать с устройства (Get) или загружать на устройство (Put) разные типы объектов.

Я пробовал скачивать точки маршрута и записанный трек (кнопки WPoint и Track соответственно). После их нажатия программа получает с устройства список имеющихся в нём объектов, и уже в другом окошке можно выбрать нужный и сохранить/экспортировать. Треки можно сразу экспортировать в формате GPX. Ещё треки можно просматривать и редактировать на «карте» в gpsman. Слово «карта» написал в кавычках — потому что вначале это чистый лист, подложку с картой сделать вроде бы можно, но как — пока не разбирался.

Можно загрузить трек и точки маршрута с устройства при помощи программы gpsbabel, из коммандной строки. Если устройство подключено к /dev/ttyUSB0, а нужен трек с точками в формате GPX, то получить его можно так:
$ gpsbabel -t -w -i garmin -f /dev/ttyUSB0 -o gpx -F мойтрек.gpx
Другой способ получить эту информацию — скопировать с устройства GPX-файл в режиме USB Mass Storage, а потом уже его конверировать-преобразовывать… Этот файл с названием вида ГГГГММДД.gpx появляется на карточке памяти только если включена соответствующая функция в приборе. В него пишутся копии всех треков за день, сам прибор никак этой информацией не пользуется. gpsman же позволяет скачивать треки, находящиеся в памяти прибора. На мой взгляд, использовать gpsman проще, потому что треки и точки пути будут уже разделены и называться так же, как и на устройстве.

Лирическое отступление: Как вставить GPX-трек на Google Earth или Google Maps? Совет нашёл на Geofaq.ru (загрузка данных GPS на растровую карту). Если кратко, то трек нужно преобразовать в формат KML, а затем выложить куда-нибудь в веб, а в Google Maps указать URL этого файла. В Google Earth KML-файл можно открыть непосредственно. В случае использования свободного софта, преобразовать файл из GPX в KML может GPSBabel:
$ gpsbabel -i gpx -f 20080611.gpx -o kml -F 20080611.kml

Эта команда говорит: исходный формат GPX (-i gpx), исходные данные брать из файла 20080611.gpx (-f имяфала), конечный формат KML (-o kml), писать результат в файл 20060811.kml (-F имяфала). Всё, полученный файл можно просмотреть в Google Earth или Google Maps.

Загружать точки-треки-маршруты с компьютера на навигатор я ещё не пробовал, но в целом создалось впечатление, что работать с точками-треками-маршрутами можно без проблем.

Другие способы: у gpsman есть интерфейс коммандной строки (ещё не пробовал), есть программа gpstrans, умеющая делать примерно то же самое, тоже с интерфейсом коммандной строки (тоже ещё не пробовал).

Далее речь пойдёт о загрузке в прибор карт, прежде всего неофициальных (потому что покрытие официальных гарминовских топографических карт весьма неудовлетворительное).

Использование официальной MapSource4.0

С устройством поставляется программа MapSource4.0, необходимая для установки официльных карт, годная и для скачивания-закачивания треков, маршрутов и точек. Программа без проблем установилась под wine (версия 1.0-rc-1), даже на русском языке.

Народ на форумах подсказал, что нужно сделать вот так:
$ ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1

и после этого перезапустить MapSource. После этого программа стала находить подключенный по USB прибор и с ним работать. Проверил передачу треков и точек пути, загрузку карт на прибор. Вроде всё нормально.

Использование неофициальной QLandkarte

QLandkarte — свободная программка с неплохим интерфейсом предназначенная заменить собой несвободную MapSource, в том числе загружать на устройство карты. В данный момент мне удалось с её помощью просматривать карты в формате IMG, но вот соединяться с устройством QLandkarte никак не хочет. Выдаёт мистическую «Device link error», а в настройках прямо сказано, что имя порта для USB-устройств игнорируется… В общем, надо разбираться, копать список рассылки, потому что программа похоже стоит того.

Другие способы загружать на устройство карты

Копирование карт в режиме USB Mass Storage. Вот здесь предлагают такой способ:
Q: I copied the IMG files onto my GPS, but don't see anything.
A: Garmin GPS's have to use the gmapsupp.img file in the Garmin folder (USB Drive Letter:\Garmin\GMAPSUPP.IMG) and there can only be one of this file. Either rename the 1 file you want to gmapsupp.img or use sendmap20 to compile all the img's you want into one gmapsupp.img file.

Попробовал, создал на карточке устройства папку. Клал туда IMG-файлы. Устройство не видит. Переименовывал тот или иной файл в GMAPSUPP.IMG. Не находит. Пробовал называть строчными буквами (хотя там же всё равно FAT?). Не помогает. То ли карты не те, то ли надо что-то с устройством вначале сделать.

Есть программка sendmap20. Бесплатная её версия для Linux не работает: точнее не находит /dev/ttyUSB0. И что с ней можно сделать — я не придумал. Зато вот на этом польском форуме написали, что если в wine связать порт com1 c /dev/ttyUSB0 (см. выше про MapSource), то под wine будет работать бесплатная Windows-версия sendmap20.

И действительно, sendmap20 без проблем работает в wine после привязки порта, карты на устройство загружаются. Также в wine хорошо работает GPSMapEdit, которым можно создавать и редактировать карты. Бинарная бесплатная версия cgpsmapper, который конвертирует файлы из «польской нотации» в формат IMG, используемый Garmin, — тоже работает. Так что уже даже удалось создать и загрузить на устройство самодельную карту. При использовании sendmap20 нужно каждый раз стирать с устройства все карты и заливать весь нужный набор заново, это особенность программы.

Резюме: подключение GPS устройства Garmin GPSmap 60Cx в Linux проблем не вызвало, передача точек пути, треков и маршрутов похоже работает нормально (как минимум, в MapSource и в gpsman), конвертировать данные в другие форматы умеет gpsbabel, карты можно загружать на устройство с помощью sendmap20 или MapSource под wine; сами карты в формате IMG в Linux можно просмотреть в QLandkarte или официальном MapSource, полный цикл подготовки карт можно выполнить при помощи бесплатного (но несвободного) ПО, но замену некоторым программам можно найти. В этом плане я связываю надежды с QGIS и GRASS, но пока ничего с их помощью не произвёл.

Ссылки по теме:

20080401

Как установить точное время (ntpdate)

Недавняя смена зимнего времени на летнее принесла как всегда путаницу. Устройства нынче все слишком умные. Все с часами, многие с понятиями о часовых поясах, некоторые даже сами переводить на летнее время умеют (если настройка включена) или сверяться с сотовым оператором… Однако вся эта «умность» только вносит путаницу, потому что после перевода времени никогда достоверно не знаешь, какие же часы теперь показывают правильное время («А это устройство само переводит или надо переводить вручную? А я в настройках включил ли переход на летнее время? А вторая операционка на ноутбуке время второй раз не переводит? А телефон уже синхронизовался с оператором или нет?»). А в наручных механических часах, которым можно верить, — батарейка села. Телевизор давно сломался (к счастью!).

В общем, делать нечего. Беру компьютер и синхронизую время с серверами в интернете. Об этом много раз написано, но всё сводится обычно к одной команде:
sudo ntpdate адрес_NTP_сервера
Подходящий сервер можно найти, например, в этом списке. Есть ещё пулы серверов. Многим, наверное, подойдёт europe.pool.ntp.org.

Всё. После синхронизации часов жить стало гораздо спокойнее. А вообще эта история ещё раз подтверждает, что доверять электронике и компьютерам ничего серьёзного нельзя.

P.S. Моя гражданская позиция проста: долой переходы с зимнего времени на летнее и обратно, да здравствует летнее время круглый год и +1 час светлого времени суток после работы! :)

P.P.S. Заодно упомяну как сменить часовой пояс (при переезде) в Debian:
$ sudo dpkg-reconfigure tzdata
Иногда пригождается.

20080325

Как включить VGA-выход на проектор (используя xrandr)

Не прошло и месяца с тех пор, как мне пришлось подключать ноутбук с видеокарточкой Nvidia к проектору, как пришлось подключать к проектору и свой ноутбук, со встроенным видео Intel 915GM. В этот раз всё было гораздо проще. Рецепт ниже. Насколько я понимаю, он подходит и для большинства владельцев ноутбуков с видео ATI.

В общем, самым простым и универсальным способом мне показалось использование утилиты xrandr, позволяющей управлять видеовыходами и их видеорежимами на лету. Насколько я понимаю, для этого достаточно, чтобы в системе был установлен более-менее свежий X.org и видеодрайвер с поддержкой расширения RandR (Resize and Rotate).

Чтобы посмотреть какие видеовыходы и видеорежимы доступны, нужно выполнить команду xrandr -q:
~$ xrandr -q
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 1280 x 1280
VGA disconnected (normal left inverted right)
LVDS connected 1280x800+0+0 (normal left inverted right) 331mm x 207mm
1280x800 60.0*+ 60.0
1280x768 60.0
1024x768 60.0
800x600 60.3
640x480 59.9
TV disconnected (normal left inverted right)

Как видно, в данный момент у меня включен только основной экран ноутбука (LVDS) в режиме 1280×800, VGA выход на проектор отключен.

Чтобы включить тот или иной режим на том или ином выходе можно использовать команду:
$ xrandr --output название_выхода --mode порядковый_номер_или_описание_режима

Чтобы отключить видео выход:
$ xrandr --output название_выхода --off


Теперь о подключении к проектору. Проекторы в большинстве случаев рассчитаны на вполне определённое разрешение. Чаще всего 1024×768. Совсем старые могут быть 800×600. Прошу заметить, что это разрешение отличается от разрешения распространённого нанче широкого ноутбучного экрана с соотношением сторон 16:10. Я же предпочитаю видеть на экране ноутбука во время презентации то же изображение, что и на проекторе. Это значит, что прежде чем подключать ноутбук к проектору, необходимо переключить разрешение на экране ноутбука, а затем включить вывод идентичного изображения на VGA. При этом изображение на ЖК-экране ноутбука станет замыленным, но это нормально и связано с интерполяцией разрешения 1024×768 на физическую матрицу 1280×800. Вести презентацию это не мешает. После же презентации нужно отключить внешний VGA-выход и вернуть экранное разрешение к нормальному.

В результате я написал себе два однострочных скрипта, чтобы включить «режим презентации»:
xrandr --output LVDS --mode 1024x768 && xrandr --output VGA --mode 1024x768
и чтобы вернутья в нормальный видео-режим:
xrandr --output VGA --off && xrandr --output LVDS --mode 1280x800


Вызывать их можно из терминала, или по кнопке на панели, или по комбинации клавиши (например, с помощью xbindkeys). Это уже детали.

Ссылки по теме (по-английски):
How to use Linux laptop in presentations
Use XRandR 1.2 to Swtich on External Display for Thinkpad Laptop
Xorg RandR 1.2 (в ThinkWiki)
How to use RandR 1.2 (в Debian Wiki)

20080220

Настройка выхода на проектор с помощью режима TwinView для Nvidia GeForce 8400MG

Сегодня понадобилось настроить работу проектора на ноутбуке Acer Aspire 5520. Подсистема видео — Nvidia GeForce 8400MG. Надо было настроить Xorg так, чтобы одно и то же изображение выдавалось и на экран ноутбука, и на проектор.

Дополнение: в комментариях говорят, что можно всё было настроить с помощью графической утилиты nvidia-settings.

Дополнение: пользователям ноутбуков с видео Intel или ATI подключать ноутбук к проектору гораздо проще. Включить VGA-выход и задать на нём нужное разрешение можно командой xrandr.

Что наблюдалось: подключаю проектор, запускаю машину, при загрузке изображение на проектор выдаётся нормально, потом запускается KDM, изображение на проекторе пропадает, нажатие кнопки переключения видеовыхода ни к чему не приводит. При переключении в виртуальную консоль (Ctrl-Alt-F1) изображение на проекторе появляется, при переключении обратно в сеанс X (Ctrl-Alt-F7) — пропадает. Нажатие Fn+5 (переключение видеовыходов) ни к чему не приводило.

Я уже давно и старательно выбираю системы только со встроенным видео Intel, так что в этот раз пришлось погуглить. В результате, я только сегодня узнал, что у nVidia есть специальный режим TwinView для вывода на два монитора, и его-то и надо должным образом настроить. Использовался видеодрайвер nvidia.

Как поступать правильно, честно говоря, не знаю. Просто добавил в /etc/X11/xorg.conf в раздел Screen следующие строчки (ноутбук уже отдал хозяину, и пишу по памяти, повторно подглядывая в найденные в интернете советы и рецепты):
Option "TwinView" "1"
Option "TwinViewOrientation" "Clone"
Option "TwinViewXineramaInfoOrder" "DFP-0,CRT-0"
Option "MonitorLayout" "LFP,LFP+CRT"
Option "metamodes" "DFP: 1280x800 +0+0, CRT: NULL; DFP: 1024x768 +0+0, CRT: 1024x768 +0+0; DFP: 800x600 +0+0, CRT: 800x600 +0+0"
После этого стало возможно переключать метарежимы (комбинации режимов для ЖК-экрана и для внешнего VGA-выхода) по Ctrl-Alt-Fn-+/-. В данном случае режим 1280×800 показывается только на ЖК-экране, режимы 1024×768 и 800×600 показываются и на экране, и на внешнем проекторе. Как легко заметить, метарежимы отделяются друг от друга точкой с запятой, а режимы каждого из устройств вывода — запятыми. Изменение «+0+0» на что-нибудь вроде «+1280+0» позволяет настроить работу двух экранов рядом (если указано «+0+0» — изображения на экранах совпадают). Как я понял, порядок устройств, указанный в опции TwinViewXineramaInfoOrder влияет на то, на каком из двух экранов будет рисоваться приглашение KDM/GDM, панель KDE и прочее. Впрочем, поэкспериментировать особо времени не было.

Надо отметить, что у меня проектор был подключен сразу при запуске машины. Похоже, это имеет значение. В интернете встречаются советы добавить опцию «Option "ConnectedMonitor" "CRT,CRT"». Впрочем, у меня всё заработало без неё. Если этот ноутбук ещё раз попадёт мне в руки — может быть попробую.

К сожалению, я не знаю иного способа изменить виртуальное разрешение (разрешение рабочего стола), иначе, как поставив первым другое разрешение в списке режимов. В результате, во всех трёх метарежимах виртуальное разрешение остаётся одним и тем же, 1280×800. Так что решение половинчатое. Ничего лучше, чем запускать второй X-сервер специально для показа чего-либо на проекторе — в голову пока не пришло.

Если кому интересно: на ноутбуке стояла Mandriva 2007, работало всё, кроме проектора, вроде бы гладко, но ставил не я, поэтому не могу сказать, сколько там до этого требовалось плясок с бубном.

Ссылки по теме:

How to use linux laptop in presentations ★★★
Getting a projector to work under Ubuntu Linux with Nvidia drivers
Nvidia, TwinView and xorg.conf
Gentoo Wiki: Dual Monitors Howto
Как включить VGA-выход на проектор (используя xrandr)