20140718

xlock, mplayer и dpms

уж несколько лет наблюдаю одну маленькую проблему:
если запущен mplayer на воспроизведение видео (даже когда стоит на паузе), то не удаётся заблокировать экран.

так как всякими гномями-кадэями я не пользуюсь, а в качестве wm-а у меня стоит скромно-спартанский icewm, то приходится для блокировки экрана использовать программу xlock из пакета xlockmore (в icewm нет собственного встроенного блокировщика).

а пакет этот уж много лет отсутствует в репозиториях и все на него забили.
вот даже баг-репорт есть ровнёхонько про мою проблему: https://bugs.debian.org/156769

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

за годы я уже привык «контролировать ситуацию», и, если хочу заблокировать экран, вспоминаю, не оставил ли случайно запущенный mplayer (благо, я видео смотрю очень редко).

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

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

помогло вдумчивое медитирование над выводом xlock:

X Error of failed request: BadMatch (invalid parameter attributes)
 Major opcode of failed request: 131 (DPMS)
 Minor opcode of failed request: 6 (DPMSForceLevel)
 Serial number of failed request: 443
 Current serial number in output stream: 446


dpms. не тут ли собака порылась?

запрос «xlock dpms»  дал нужное! команда
$ xset q
без mplayer-а в «рабочем состоянии» показывает, что dpms включен.
а при запущенном mplayer-е (с видеороликом) — показывает, что выключен.

сразу нашлась и конфигурационная опция у mplayer-а:
-nostop-xscreensaver

или в конфигурационном файле ~/.mplayer/config:
stop-xscreensaver=no


ну а если всё-таки хочется, чтобы при запуске mplayer-а dpms всё-таки отключался (и экран, соответственно, не гас после dmps-интервала), то вместо этой опции можно восстанавливать dpms, если вдруг опять собъётся:
$ xset +dpms


вот такие пироги.
и чего я столько лет мучался?

20131112

ips driver error

полетела таблица ibf_posts.
запущено восстановление.

20131014

винная магия, или чудеса в локальном вине

относится к: wine, locales

с каких-то (вероятно, незапамятных) времён wine научили реагировать на текущую пользовательскую локаль.
и если она, к примеру "ru_RU.UTF-8", то «на лету» происходит подстановка (или перекодировка, или ещё хрен знает что) локали "ru_RU.CP1251".
и для вызова «виндовой» программы с кириллическим интерфейсом уже не требуется переопределять локаль для отображения кириллицы таким вот образом:
$ LC_ALL=ru_RU.CP1251 wine <программа>

но у данного искусственно-интелектуального поведения (как обычно и бывает с и.и.) возникают подводные камни:
при вводе текста на «англице» вводится что-то типа "ЂЃ", а уж кириллица вообще заменяется по большей части пробелами.
что ещё более замечательно — происходить это может не во всех формах ввода (даже в пределах одной программы), а только в тех, где, вероятно, у поля ввода прописаны какие-то не совсем стандартные шрифтовые свойства.

вариантов обхода данного подводного камня два:
  1. сменить для пользователя умолчальную локаль на "en_US.UTF-8" и добавлять локаль при вызове wine (как написано выше).
  2. запустить winecfg и заменить приоритетность использования библиотеки usp10.dll с "native, builtin" на "builtin, native" или просто на "builtin".
p.s. только не спрашивайте меня, как я «дошёл» до второго варианта.
это «винная магия, или чудеса в локальном вине».

20130906

как мы выкладываем LinuxFormat на rutracker.org

возможно, некоторым известно, что с марта этого года редакция русскоязычной версии LinuxFormat-а публикует архив электронных версий журналов на сайте rutracker.org.
сам-то архив всегда был доступен на сайте linuxformat.ru, новым стал только способ предоставления файлов.
деталей взаимодействия с сайтом rutracker.org я приводить не буду, так как, во-первых, это несущественно для данной технической заметки, а во-вторых, не я этим занимаюсь.

итак, есть сервер, работающий под управлением debian gnu/linux и есть дерево с файлами, из которых надо создать torrent-файл и впоследствии поддерживать его «раздачу»:
LinuxFormat/
├── 2005
│   ├── 070.pdf
...
└── 2012
    ├── 152-153.pdf
    ├── 154fix.pdf
    ├── 155.pdf
    ├── 156.pdf
    ├── 157.pdf
    └── 158.pdf

всё, что понадобилось доустановить, это два пакета — rtorrent и bittornado.
по условиям работы rutracker.org (вероятно, и всех других трекер-сайтов) нужно сгенерировать torrent-файл с пустым списком трекеров.
поэтому в качестве первого параметра программе btmakemetafile передаём пустую строку:
$ btmakemetafile '' LinuxFormat
получившийся файл LinuxFormat.torrent и используем на сайте rutracker.org.
после создания/обновления «раздачи» скачиваем подправленный сайтом torrent-файл (в него добавляется список трекеров и наш уникальный секретный «ключ»).
этот самый полученный файл и надо «скормить» rtorrent-у.
но предварительно имеет смысл задать ограничение скорости и сохранение сессий, чтобы после перезапуска rtorrent-а не требовалось дополнительных телодвижений.
для этого в файл ~/.rtorrent.rc вписываем:
upload_rate = 123
session = ./session
т.е., скорость загрузки с нашего сервера будет 123KiB, а сессия будет сохраняться в каталоге session того каталога, откуда запущен rtorrent (не забудьте его создать — сам rtorrent этого не делает).

финальный штрих.
т.к. rtorrent не умеет работать «демоном», запускать его можно, например, по рецепту разработчиков, используя предлагаемый ими init-скрипт (после внесения необходимых правок).

20130711

оповещения об окончании чего-нибудь

вот запущен у вас в терминале какой-нибудь длительный процесс, по окончании которого вам нужно что-то сделать.
ну, сборка чего-нибудь (не будем показывать пальцем на гентушников, хорошо?).
или ping к какой-нибудь машине, ушедшей в глубокую перезагрузку.
или просто sleep (в роли таймера).

как «поймать» момент?
ну, можно время от времени поглядывать, переключаясь на нужное окно или рабочий стол.
или присвоить для нужного окна значение menu свойству layer (ну или как оно в вашем wm-е называется, чтоб окно всегда сверху было).
или (для эстетики) поэкспериментировать с [полу]прозрачностью.

а можно воспользоваться программкой notify-send (вот так оно выглядит) из пакета libnotify-bin.
а в пакете notification-daemon есть программка notification-properties, позволяющая выбрать тему и местоположение (один из четырёх углов) самого оповещения.

а чтобы оповещение не пропадало спустя несколько секунд, можно передать параметр:
$ notify-send -t 0 заголовок основная-часть

в man-е упомянуты и другие интересные опции.
и всё это ещё и в скриптик (для упрощения набора) можно завернуть.
я так и сделал, и назвал его gn.

примеры:
$ sleep 3600; gn "уж час прошёл, а германа всё нет."
$ while true; do ping -c 1 google.com &>/dev/null && break; sleep 5; done; gn гугль заработал в $(date)
$ echo 'gn "обещанного три года ждут. сейчас $(\date), а запустил ты меня '$(date)'"' | at "now + 3 year"

20130328

debian man's trick

в debian (и, судя по всему, в ubuntu, но, судя по всему, не в centos/mandriva/gentoo) программа man умеет догадываться, что пробел следует заменить минусом.
о чём речь:
$ man word1 word2 ...
обычное поведение: man ищет последовательно man-страницы для word1, затем word2 и т.д., и отображает первую найденную.
умное поведение: man сначала ищет страницу word1-word2, и лишь затем — word1.

пример:
$ man git config
отображается страница git-config, а не git. естественно, если присутствует в системе.

p.s. в man man упоминаний о таком поведении не нашёл (возможно, плохо искал).

20130307

охотники за головами не дремлют

вчерашнего дня получил такое вот письмо (личная информация опущена):
From: Natalia ... <...@google.com>
Date: Wed, 6 Mar 2013 10:42:49 +0000
Subject: Greetings from Google!

Privet Alex,

Hope you are doing great.  I'm Natalia from Google's recruitment team.
I came across your interests in Linux  [1]here, along with system development
which attracted me.
I'm wondering if you might be open to a general conversation - I'd love to get
a better understanding of the work you enjoy doing.

Looking forward to hearing from you soon!

Natalia ... | Tehnical Sourcer | ...
[4]Work with us at Dublin Office!

References:
[1] http://unixforum.org/index.php?showuser=152
[4] http://www.home-designing.com/2013/02/googles-new-office-in-dublin
на что ответствовал:
Уважаемая Natalia!

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

upd. ответ на мой ответ. даже частично по-русски:

Hi Alex, 

Thank you for your reply. I will be happy to stay in touch in case something changes.
 
Спасибо вам за ответ. Желаю успехов, если знаете инжинеров - специалистов вашего профиля, можете поделиться моими контактными данными. 

Wish you good luck!