logo

muhas.ru — это просто блог…

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

Приятное новшество в dmenu — вертикальный список

вертикальное dmenudmenu — динамическое меню для X, первоначально предназначавшееся для dwm(динамический оконный менеджер). Может управляет огромнейшем количеством определенных пользователем пунктов меню (10000 и более).

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

Всего лишь поделиться одной замечательной возможностью появившейся с вышедшей на днях версией 4.1.1 — а именно появление вертикального списка.

Выглядит это приблизительно так как на скриншоте в начале этой записи. Количество линий задается параметром -l, в примере на скриншоте это -l 5. Обратите внимание, несмотря на то что в параметрах указано 5 линий отображается всё-равно 6 — первая линия в режиме вертикального списка зарезервирована для набора текста.

Пока не знаю какую полезность вертикальность принесет на практике, но по плейлисту mpd (например, добавив опцию -l в dmpd) бегать в вертикальном виде удобнее...

ArchLinux, ppp, netcfg и Huawei E1550 3G модем

Huawei E1550 3GНемного лирики

Собираюсь в долгую поездку и в преддверии этого решил подготовиться ибо что там будет с интернетом неведомо. Взял мегафоновский модем попользовать на время поездки и пошел в бой. Как оказалось он залочен на симки от мегафона, а у меня не было мегафоновской симки для теста модема в linux — пришлось разлочивать. Разлочить оказалось в разы сложнее чем настроить сам модем, ибо в сети Уйма (да-да, именно с большой буквы) предложений разлочить за денюжку, но мудрый гугл спустя часик поиска навел на генератор кодов разлочки и прошивки на основе IMEI (аж целых два, и оба работают под вайном). Правда писал я код разлочки из под windows, не подумав о том что можно было использовать в linux comgt или MobilePartner который в комплекте с модемом — кстати, через MobilePartner можно не пугаться страшных слов и действий(компилций,настройка,wvdial,ppp), а просто использовать модем через интерфейс схожий с программой управления модемом от мегафона, но он на яве и даже в трей не умеет сворачиваться — так что это не наш метод.

Чуток конкретики

Оказалось что всё до наивности просто — модем видиться как /dev/ttyUSB{0,1}
Правда почему-то на следующий день он отказался так делать и пришлось поставить из AUR usb_modeswitch после которого всё вновь стало замечательно и без каких-либо манипуляций. Возможно первый раз всё определилось славно именно из-за того что до этого он разлочивался под виндою и сразу после этого сунулся в компьютер с ArchLinux.

NetworkManager я не пользую, но там по слухам всё до банальности просто — указываем устройство прописываем точку доступа и прочее после чего радуемся. wvdial на который в большинстве своем расчитаны все виденные мною хелпы пользовать не хотелось ибо в системе уже наличиствует ppp и что самое главное его можно использовать с помощью netcfg, т.е. переключать сеть можно так же легко как и в networkmanager (в том числе и с помощью dmenu — dnetcfg). Так что наш метод это ppp и netcfg

Huawei E1550 и ppp

Для начала нам надо будет установить comgt (он в community) и usb_modeswitch (он в AUR) и после этого выполнить
comgt -d /dev/ttyUSB0
который попросит ввести пинкод от симки (и предположительно код для разлочки, если симка не та — но так как я уже разлочил под виндой, то подтвердить этого не могу), напишет информацию о регистрации в сети и прочее...

После этого создаем файл /etc/ppp/peers/3g в котором пишем
connect "/usr/sbin/chat -f /etc/ppp/3g"
/dev/ttyUSB0
115200
#460800
crtscts
noauth
#novj
#novjccomp
#nobsdcomp
#nopcomp
#noaccomp

usepeerdns
defaultroute


user "beeline"
password beeline
и файл который указан в параметрах к в первой строке, т.е. в нашем случае /etc/ppp/3g
TIMEOUT 35
ECHO    ON
ABORT   '\nBUSY\r'
ABORT   '\nERROR\r'
ABORT   '\nNO ANSWER\r'
ABORT   '\nNO CARRIER\r'
ABORT   '\nNO DIALTONE\r'
ABORT   '\nRINGING\r\n\r\nRINGING\r'
ABORT   '\nUsername/Password Incorrect\r' 
''      \rAT
OK      'AT+CGDCONT=1,"IP","internet.beeline.ru"'
OK      ATD*99***1#
CONNECT ""
Ну или что бы не было двух файлов создаем только только первый и заменяем в нем строку
connect "/usr/sbin/chat -f /etc/ppp/3g"
на
connect "/usr/sbin/chat -v \
TIMEOUT 35 \
ECHO    ON \
ABORT   '\nBUSY\r' \
ABORT   '\nERROR\r' \
ABORT   '\nNO ANSWER\r' \
ABORT   '\nNO CARRIER\r' \
ABORT   '\nNO DIALTONE\r' \
ABORT   '\nRINGING\r\n\r\nRINGING\r' \
ABORT   '\nUsername/Password Incorrect\r'  \
''      \rAT \
OK      'AT+CGDCONT=1,\"IP\",\"internet.beeline.ru\"' \
OK      ATD*99***1# \
CONNECT \c \
"

Естественно что логин, пароль, точка доступа и номер телефона для набора зависят от вашего оператора.
Так же обратите внимание что некоторые строки в /etc/ppp/peers/3g у меня закомментированы — я их показал лишь для примера. Если у вас не будет работать то поиграйтесь с расскомментированием отдельных строк и заменой скорости. У меня заработало именно с такими настройками (скорость 460800 это для 3g насколько я понимаю, но 3g покрытия у меня тут нету).

Для запуска соеденения запускаем pon 3g (не забываем о правах).
В отличии от используемого мною до этого Motorola a1200 в качестве gprs модема, dns устанавливается нормально.

Huawei E1550, но уже через netcfg

Собственно тут нам достаточно создать профиль netcfg(файл в каталоге /etc/network.d/ — имя файла есть имя профиля) в котором записано
CONNECTION='ppp'
INTERFACE='ignore'
PEER='3g' #это имя файла в /etc/ppp/peers/
PPP_TIMEOUT=10
Вот, собственно, и готов профиль. Осталось лишь его использовать (netcfg имя_файла или любой фронтенд для netcfg).

Приятного использования!


PS. программы для генерации кодов разлочки и кодов для прошивки модема Huawei E1550 тут

GNU Screen layout: восстановление регионов после детатча

В комментариях к этому посту напомнили о «слоях» (layout), о которых почему-то многие забывают. Слои позволяют иметь сразу несколько видов размещения регионов и переключаться между ними. Создаються из текущего расположения командой screen'а layout new имя слоя (layout name имя слоя создаст новый пустой слой) и эти слои можно запоминать...

Не буду вдаваться в подробности о применении слоев, ибо интересует нас всего лишь восстановление регионов после детатча — а сделать восстановление достаточно просто, достаточно лишь создать новый слой и сохранить его перед детатчем layout save имя слоя. Сохранять конечно не всегда вариант, можно банально забыть или не успеть это сделать (к примеру, если ssh соединение разорвалось, а вы на удаленной машине работали в GNU Screen), но мудрые разработчики предусмотрели это добавив возможность автоматического сохранения слоев, которое по умолчанию выключено. Для включения либо ввести команду в скрин, либо добавить опцию
layout autosave on
в screenrc. В конфиге так же можно и создавать слой при старте. К примеру строки
layout new desktop
layout autosave on
в screenrc создадут слой и включат авто сохранение, после чего можно будет с чистой совестью и не боясь за потерю регионов делать detach.

С учетом того что в будущих версиях нас ждут вертикальные регионы (пользователи git могут ими пользоваться уже сейчас), сие делает из скрина неплохой тайловый wm для консоли — ещё бы поддержку цветов более чем 256, а то кино во фреймбуфере смотреть невозможно =)

Экономим трафик — delta обновления в ArchLinux

UP ещё одно зеркало с дельтами http://delta.archlinux.fr/ — i686 и x86_64 зеркало с дельта-обновлениями

delta обновления
Всё таки нашелся для ArchLinux репозитарий предоставляющий возможности xdelta, т.е. позволяющего не тянуть обновленный пакет целиком, а тянуть только разницу между текущим установленным и обновленным сделанную с помощью xdelta. В pacman такая возможность присутствует уже очень давно, однако репозитариев с такой возможностью лично мне было не видно... И вот свершилось чудо — я наткнулся на сею репу!

Подготавливаемся
Ставим xdelta3
pacman -S xdelta3
Редактируем /etc/pacman.conf, раскомментируя строку UseDelta тем самым включая использование дельт.
И добавляем в самый верх mirrorlist (/etc/pacman.d/mirrorlist) строку
Server = http://archdelta.net/$repo/os/i686

Как вы уже заметили адрес дельта-репозитария для pacman это archdelta.net

Ложка дегтя
Радоваться конечно рано, особенно пользователям x86_64 ибо репозитарий только для i686.
Так же с текущей версией xdelta3 3.0y имеются проблемы, так что если у вас с этой версией тоже возникают какие-то проблемы, то ставим предыдущую версию
pacman -U http://archdelta.net/xdelta3-3.0v-2-i686.pkg.tar.gz
и заносим xdelta3 в IgnorePkg до лучших времен...

Радуемся
Экономия трафика достаточно ощутима (да что там, в некоторых случаях она просто-таки огромна), так что рекомендую.

PS. Тема об этом репозитарии на арчефоруме

UP: в новом xdelta3 баг исправили, так что можно использовать и его

Меню выключения с использованием dmenu

С тех пор как не использую гномокеды для выключения компьютера использовал halt(reboot,hibernate по ситуации) в консоли, самопальную мордочку на gtkdialog вызываемую по хоткею и прочие изыски (как то в меню openbox, oblogout и прочее).

Но дабы не нарушать консистентность был написан простенький скрипт для dmenu (всё-таки dmenu отличная вещь) вызываемый по хоткею.
#!/bin/sh

CMD="poweroff
reboot
s2ram
hibernate"


CMD=`echo "$CMD" | dmenu -fn '-xos4-terminus-medium-r-normal--12-120-72-72-c-60-*-*' -nb '#737373' -nf '#e7e3e7'  -sb '#e7e3e7' -sf '#737373'`

case $CMD in 
# что бы не видеть портянку в dmenu переводим короткие имена в длинный путь
# ну или заменяем на dbus-send --system --print-reply --dest=org.freedesktop.DeviceKit.Power \
# /org/freedesktop/DeviceKit/Power org.freedesktop.DeviceKit.Power.Hibernate 
# wm-session-end --hibernate и прочее
 s2ram) 
	# sudo должен быть настроен, что как бы естественно
	CMD="sudo s2ram -f -a 1 -s" #только для пример
	;; 
 hibernate) 
	CMD="sudo s2disk" 
	;;
 *) 
	CMD="sudo $CMD" 
	;;
esac
echo $CMD
if [ ."$CMD" = ."" ]; then # выходим если нажили esc в dmenu
	exit 0
fi

# ну и подтверждение через zenity
#zenity --question --text="Чё реально запустить '$CMD'?" --ok-label="ну да" --cancel-label="да ну" --no-wrap && \
#$CMD

# подтверждение через dmenu
#CONFIRM="yes
#no"
#CONFIRM=`echo "$CONFIRM" | dmenu -fn '-xos4-terminus-medium-r-normal--12-120-72-72-c-60-*-*' -nb '#737373' -nf '#e7e3e7'  -sb '#e7e3e7' -sf '#737373'`
#if [ ."$CONFIRM" = ."yes" ]; then
#	 $CMD
#fi

# ну и без подтверждения сразу
$CMD

# куда же без выхода =)
exit 0

Удобно и к мышке тянуться не надо, к тому же подредактировать в соответствии с нуждами легко (в процессе жизни он у меня пару раз изменялся, что видно по закомментированным подтверждениям). Так же можно сделать неплохое дополнение к dmenfm, правда тогда кол-во нажимаемых клавиш для его вызова увеличится.