2010/07/28

Поднимаем ZNC на gentoo

ZNC - известный irc bouncer, т.е. выступает в качестве прокси при соединении с серверами irc. Полезен не только в том плане, что сохраняет личные сообщения и статус онлайн в отсутствие клиента, но и может шифровать трафик от клиента до себя.

Ну и после появления у себя уютненького сервера на gentoo, я, разумеется, начал ставить туда всё что ни попадя. :) Собственно говоря, процесс поднятия ZNC практически одинаков для всех систем, под которые он предназначен, отличается лишь инсталляция. Я использовал emerge:
# emerge irc-net/znc
Добавление пользователя проще всего делать в интерактивном режиме:
$ znc --makeconf
Тут он спросит всякие настройки типа юзер/логин/порт/сервер/канал и сформирует конфиг ~/.znc/configs/znc.conf
Всё, теперь простой командой $ znc в фоне запускается процесс, слушающий порт, который был указан при конфигурации. Подключаться к нему нужно так, если бы это был простой irc сервер, т.е. в настройках указываем ip/port - физического сервера, на котором работает znc, и user/password - того, которого создали при конфигурировании znc.

Более подробная информация: http://en.znc.in/wiki/ZNC

2010/07/19

Простейший веб шелл на питоне

 #!/usr/local/bin/python
import cgitb, os, urllib, subprocess

cgitb.enable()
str_command = urllib.unquote(os.environ['QUERY_STRING'])

p = subprocess.Popen(['/usr/local/bin/bash', '-c', str_command],\
    stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
output = urllib.unquote(p.stdout.read())

print """Content-Type: text/html\n
<html><body>
<pre>
$ %s
%s
</pre>
</body></html>""" % (str_command, output)

Скрипт для изменения ориентации экрана (Lenovo Thinkpad X200t)

Забинден у меня на кнопочку, меняет ориентацию экрана (а также стилуса и тачскрина) по часовой стрелке при каждом нажатии. По идее должен подходить ко всем планшетным ноутам. Единственное, что может потребоваться изменить - это имена устройств, которые можно узнать командой xsetwacom --list dev.

#!/bin/bash

function set_normal {
xrandr -o normal
xsetwacom set cursor Rotate none
xsetwacom set touch Rotate none
xsetwacom set eraser Rotate none
orientation="normal"
}

function set_right {
xrandr -o right
xsetwacom set cursor Rotate cw
xsetwacom set touch Rotate cw
xsetwacom set eraser Rotate cw
orientation="right"
}

function set_left {
xrandr -o left
xsetwacom set cursor Rotate ccw
xsetwacom set touch Rotate ccw
xsetwacom set eraser Rotate ccw
orientation="left"
}

function set_inverted {
xrandr -o inverted
xsetwacom set cursor Rotate half
xsetwacom set touch Rotate half
xsetwacom set eraser Rotate half
orientation="inverted"
}

orientation="$(xrandr --query --verbose | grep 'LVDS1 connected' | awk '{print $5}')"

if [ "$orientation" = "normal" ]; then
        set_right
elif [ "$orientation" = "right" ]; then
        set_inverted
elif [ "$orientation" = "inverted" ]; then
        set_left
elif [ "$orientation" = "left" ]; then
        set_normal
fi

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

Очередным шагом в сторону стремления к минимуму энергии стал отказ от всяких богомерзких Network Manager'ов. Мало того, что они жрут оперативку и глючат, так ещё и занимают место в системном трее! Безобразие. Так что wpa_supplicant. Как бы не показалось по названию, эта утилита может работать с сетями не только WPA, но и всеми остальными (беспроводными, разумеется).
В ней есть конфиг /etc/wpa_supplicant.conf в котором по умолчанию много буков, поэтому его можно смело удалить. Сразу приведу пример конфига, по которому всё станет ясно:

network={
   ssid="AP1"
   priority=10
   key_mgmt=NONE
   wep_key0=355D3671207E37DC11E9D371E3
}

network={
   ssid="AP2"
   priority=5
   psk=b20a16a0622753f26c6660cdde815131cc11dcf5b8d46d8c1c3dd003bbe7c791
}

network={
   ssid="AP3"
   priority=1
   key_mgmt=NONE
}

Видно, что конфиг состоит из блоков network, в которых собственно описываются параметры сетей, к которым wpa_supplicant будет пытаться подключаться. В примере приведены параметры сетей для статического WEP, WPA1/2 PSK и открытой сети. Параметр priority явно задает приоритет подключения, хотя он и так рассчитывается (на основании секурности и силы сигнала, что не всегда устраивает). Параметр psk - закодированный пароль, его (а точнее весь блок network) можно получить командой wpa_passphrase. Ну и запуск всего этого дела происходит командой:
wpa_supplicant -B -D wext -i wlan0 -c /etc/wpa_supplicant.conf
Стоит отметить, что происходит только ассоциация с точной доступа, IP адрес всё еще нужно получить с помощью dhcpd или dhclient. Лучше это делать не сразу же после запуска wpa_supplicant, а через некоторое время (секунд 3-5), т.к. ассоциация происходит не мгновенно.

Инвертирование цветов в X

Казалось бы, достаточно простая операция - инвертировать цвета на экране, однако далеко не все представляют, как это можно сделать средствами иксов. В основном, советовали ставить композитный оконный менеджер, но т.к. я упоротый фанат OpenBox, то это меня не устраивало. Даже в тех менеджерах, которые можно ставить отдельно от WM, т.е. в использовать вместе с ним (такие как cairo-compmgr и xcompmgr) не обладали подобной функцией. И тут я было приуныл, как решил спросить у истинного адепта линукса, наставившего меня на путь инстинный, и, да!
xcalib -invert -alter
Повесил команду на хоткей и радуюсь.

Рипаем dvd с помощью ffmpeg

Не так давно для меня процесс создания рипа двд диска был весьма темным знанием, известным лишь релизерам на рутрекер.орг. Однако всё оказалось очень даже просто (по крайней мере в линуксе):
ffmpeg -i VTS_01_1.VOB -f avi -vcodec mpeg4 -b 1500k -g 300 -bf 2 -acodec libmp3lame -ab 128k video.avi
Это типичная команда для рипа двд диска, которую можно после долгих поисков найти в мане к утилите. Фактически, два самых значительных параметра в этой команде - битрейты видео и аудио, в данном случае равные 1500k и 128k.
В каждом конкретном случае битрейт видео, разумеется, надо подбирать отдельно (если нет никаких ограничений по объему): чем более динамично видео, тем больше должен быть битрейт, по идее, для сохранения комфортной картинки. Для этого можно варьировать цифру после параметра -b и делать некий сэмпл рипа, несколько десятков секунд, просто завершить ffmpeg в процессе его работы и посмотреть что получилось.
Если исходников было несколько, то склеить их в один файл можно так:
mencoder -oac copy -ovc copy part1.avi part2.avi -o video.avi