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!

20130305

encrypt & decrypt with openssh rsa-keys

можно ли использовать публичный ключ openssh для безопасной передачи информации владельцу секретной части того же самого ключа?
краткий ответ: да.
но, увы, не так удобно, как, например, с помощью gpg.
но, увы, только в случае rsa-ключа.

теоретические соображения:
  1. в openssh используется ассиметричное шифрование: пара, состоящая из публичного и секретного ключей;
  2. к сожалению, в openssh нет инструментов для (де-)шифрования с помощью этих ключей;
  3. к счастью, такие средства есть в openssl (по крайней мере для rsa-ключей);
  4. к сожалению, openssl (пока) не понимает формата, в котором openssh хранит публичные ключи;
  5. к счастью, openssh (точнее, программа ssh-keygen) умеет конвертировать свои публичные ключи в формат pkcs8, который уже может «понять» openssl;
  6. к сожалению, это умеет делать только openssh v5.6 и выше (в debian squeeze — v5.5);
  7. к счастью, публичные rsa-ключи можно сконвертировать с помощью такого, например, скриптика: https://gist.github.com/sash-kan/5081128.
практика:


ssh.pub — публичный rsa-ключ вашего адресата;
ssh.sec — секретный rsa-ключ вашего адресата (обычно ~/.ssh/id_rsa);
sshpub-to-rsa — скрипт по ссылке, приведённой выше.

шифрование (на вашей стороне) при наличии openssh v5.6 и выше:
$ echo 'secret!!11' | openssl rsautl -encrypt -pubin -inkey \
<(ssh-keygen -f ssh.pub -e -m pkcs8) > secret.message

шифрование (на вашей стороне) при наличии openssh v5.5 и ниже:
$ echo 'secret!!11' | openssl rsautl -encrypt -pubin -inkey \
<(sshpub-to-rsa ssh.pub) > secret.message

расшифровка (на стороне вашего адресата):
$ cat secret.message | openssl rsautl -decrypt -inkey ssh.sec
secret!!11

20130225

squeeze+xen+centos5

понадобилось мне установить виртуальную машину (domu) с centos-5 на squeeze (dom0).
есть в debian gnu/linux замечательный пакет xen-tools, помогающий создавать виртуальные машины.
ориентирован он, понятно, на debian, и использует debootstrap.
но можно устанавливать и rpm-основные дистрибутивы. нужная функциональность имеется в пакете rinse.
вот только команда
$ sudo xen-create-image --hostname centos --install-method=rinse --dist centos-5 …
увы, завершается ошибкой.
шаги преодоления большей частью связаны с python-ом (кто бы сомневался):
  1. dom0 у меня 64-битный. и архитектуру для rinse (по крайней мере в этом случае) нужно указывать явно, добавив параметр --arch=amd64;
  2. в /etc/rinse/centos-5.packages (первоначальный минимальный список пакетов) надо добавить python-libs;
  3. yum-у (точнее, python-у, на котором он написан), требуется /dev/urandom. соответственно, в hook-ах (которые используют chroot) перед/после запуска yum нужно монтировать/отмонтировать /dev из основной системы;
  4. для генерации ssh-ключа системы после установки openssh-server (внутри соответствующего hook-а)требуется запустить (и сразу остановить, чтоб не мешался) sshd.
пункты 2-4 представлены в виде прилагающегося патча: https://sites.google.com/a/barak.in/www/dl/squeeze.xen.centos5.patch

20130208

иероглифы github-а

долгое время, наблюдая пустоту (или заглушки) в интерфейсе github-а в тех местах, где они используют unicode-ные графические символы (см. скриншоты), я считал, что это вызвано старой версией моего firefox-а (из репозитория squeeze).
но вдруг обнаружил, что в чистом профиле firefox-а эти символы отлично отображаются.
долго и нудно пытался выяснить, где же собака порылась, подозревал вредительство со стороны используемых плагинов.
оказалось, всё на поверхности.
в about:config:
browser.display.use_document_fonts = 1
или (для любителей мышевозюканья):
preferences → content → fonts & colors → advanced → allow pages to choose their own fonts, instead of my selection above.

было
стало

20130110

mutt html charset

люди неисправимы, почтовые клиенты своенравны, а лень родилась задолго до евы.
устав догадываться о смысле писем на русском, присланных в виде веб-страничек, порылся в этих ваших интернетах, и нашёл, чего же мне не хватало.
для просмотра html вложения с помощью w3m я давненько уже вписал нужную строчку в ~/.mailcap. но charset не детектировался w3m-ом.
это раз.
а ещё у mutt-а есть auto_view. т.е., можно смотреть html-вложение сразу же, как (почти) нормальное письмо.
это два.
  1. строка в ~/.mailcap должна выглядеть так:
    text/html; w3m -I %{charset} -dump '%s'; nametemplate=%s.html; copiousoutput
  2. для авто-преобразования веб-страничек надо добавить в ~/.muttrc:
    auto_view text/html
    (можно и до перезапуска mutt нажать двоеточие и ввести эту команду, эффект воспоследует сразу же)

20121205

unixforum недоступен

1. поломался ряд таблиц·
2. для ускорения восстановления я выключил apache·
3. восстанавливаю повреждённые таблицы·
4. ждите новостей·

20120831

эта притча

одна дочь, упоминая свою мать, говорит «моя мама», другая говорит «эта женщина»·


мораль этой притчи: разница в словах характеризует не мать, а самих дочерей·

20120825

недоступен форум

что-то с маршрутизацией к сети 91.232.225.0/24
нашего бессменного хостера в известность поставил

20120725

20120621

Fly, don't be evil!







results / результаты: https://docs.google.com/spreadsheet/ccc?key=0Ah9TMijUTwHLdDc2VUQ3RFJMYUxfSEs5TG5xTFVaZ3c

to embed petition / встроить код петиции :

<iframe src="https://docs.google.com/spreadsheet/embeddedform?formkey=dDc2VUQ3RFJMYUxfSEs5TG5xTFVaZ3c6MQ" width="760" height="632" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>

20120620

пытаюсь помочь median group (fly™) не вставать на путь пиратства

предыстория вопроса:
1. 2012-05-22 я приобрёл телефон fly iq270·
2. как и написано на сайте производителя, внутри него оказался android (и программа linux в качестве ядра)·
3. как человеку интересующемуся, меня, конечно, сразу заинтересовала возможность её (программы linux) пересборки·
4. памятуя о требованиях, изложенных в пункте 3 лицензии gpl v2 (под которой авторы и распространяют эту программу), я ожидал увидеть в прилагающейся коробке (или на сайте производителя) «all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable» (цитата из gpl v2)·
5. к сожалению, ничего упомянутого мне обнаружить не удалось·

ну а теперь история·
1. я обратился в службу поддержки, в которую попал по ссылке с сайта fly-phone.ru: http://fly-phone.ru/support/http://www.fly-help.ru/https://flymobile.zendesk.com/home
2, и создал там тикет (к сожалению, публично он недоступен, скриншоты смотрите в моём фотоальбоме):

19 06 23:35

внутри приобретённого мною телефона fly iq270 используется программа linux, распространяющаяся под лицензией gpl v2.
на основании раздела 3 этой лицензии (с текстом можно ознакомиться на сайте gnu.org) я вправе получить исходные коды этой программы каким-либо из трёх изложенных в этом разделе путей.
напоминаю, что в том же разделе уточняется, что представляет собой исходный код:
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.

p.s. гарантийный талон и чек продавца имеются.
p.p.s. на сайта kernel.org и source.android.com размещено отнюдь не всё, необходимое для компиляции и установки linux на упомянутом оборудовании.

заранее признателен за скорый ответ.
с уважением, александр баракин.
3. немного подумав, я понял, что просьба моя звучит слишком уж недружелюбно, и неплохо было бы подсказать хотя бы примерный путь, которым производителю надо было двигаться, что и сделал, добавив к тикету полезную ссылку:
чтобы вам было легче сориентироваться в ситуации, вот ссылка на небольшой faq как раз для вендоров: http://gpl-violations.org/faq/vendor-faq.html

19 Июнь 2012 23:57
4. буквально на следующий день я получил от анонимного сотрудника службы поддержки meridian group неутешительную новость:
Сотрудник службы поддержки Meridian Group

      Добрый день.
      Данную информация мы не сможем вам предоставить.
      С уважением, команда Fly.

20 Июнь 2012 12:08
5. ну что же, если meridian group (владелец fly™) не может предоставить информацию, вероятно, её сможет предоставить кто-то другой:
спасибо за ответ.

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

      с уважением, александр баракин.

20 Июнь 2012 16:57


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


как вы считаете, у нас что-нибудь получится?



мой фотоальбом, где размещены скриншоты из публично-недоступного тикета·

тема на ufo

20120605

unknown mandatory EABI object attribute 44

this message likely means that you forget to install g++-multilib package

такое сообщение скорее всего означает, что вы забыли установить пакет g++-multilib

20120518

qemu attach image

памятка, как подключить образ к qemu-виртуалке, управляемой kvm-ом (существующие инструкции что-то не то рассказывают)·
1. виртуальную машину надо вырубить·

2. размер образа — один гигабайт
$ dd if=/dev/zero of=/path/to/image bs=1M seek=1K count=0

3. копирую конфигурацию в файл /tmp/xml:
$ virsh dumpxml vm-name > /tmp/xml


4. редактирую копию:
$ vim /tmp/xml
была такая секция:
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/path/to/some.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
добавил такую:
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/path/to/image'/>
      <target dev='vdb'/>
    </disk>
5. загружаю новую конфигурацию:
$ virsh create /tmp/xml

6. вижу, что появилось новое устройство /dev/vdb
дальше понятно, что делать…

20120517

плохие ворота

502 bad gateway говорит форум…
разбираюсь…

upd.
 [Thu May 17 10:27:00 2012] [notice] child pid 20634 exit signal Segmentation fault (11)

соответственно:
$ sudo /etc/init.d/apache2 restart

вроде заработал·