Tuesday, August 27, 2013

Флаги в индикаторе раскладок клавиатуры - Mate 1.6

Отображение флагов информативнее, чем уныло-чёрного us/ru.
Делаем:
1. Создаём (sudo) папку /usr/share/icons/flags, если ещё не создана (чтобы изменения не касались всех пользователей, можно использовать папку ~/.icons/flags)
2. Забрасываем в неё иконки нужных layout'ов (у меня это ru.png и us.png 48x48 каждый).
3. В консоли:
gsettings set org.mate.peripherals-keyboard-xkb.indicator show-flags true

Всё. Если эффекта нет, то:
killall mate-panel

Saturday, August 17, 2013

URL Encoding в bash используя perl

Понадобилось для curl делать URL Encoding параметров, вводимых из консоли.
Спасло простое решение, требующеее наличие perl.
Решение здесь: http://andy.wordpress.com/2008/09/17/urlencode-in-bash-with-perl/

Продублирую:
ENCODED=$(echo -n "value to encode" | \
perl -pe's/([^-_.~A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg');
echo $ENCODED

Sunday, August 4, 2013

Регулировка яркости монитора

Захотелось менять яркость монитора, не тыкая кнопки на самом мониторе. Для этого понадобятся как минимум два пакета: ddccontrol и i2c-dev. Для GUI понадобится ещё и gddccontrol. Первым делом необходимо добавить текущего пользователя (который будет менять яркость) в группу i2c, т.к. по умолчанию запуск этой команды требует прав суперпользователя. Для этого выполняем:
sudo adduser $USER i2c
Далее необходимо, чтобы был загружен модуль ядра i2c-dev. Разумеется, каждый раз переходить в режим суперпользователя для этого неудобно да и незачем, поэтому обеспечим его автоподгрузку при старте системы, выполнив:
sudo /bin/sh -c 'echo i2c-dev >> /etc/modules'
Теперь у нас есть всё, чтобы начать настраивать саму ddccontrol/gddccontrol. Вначале запускаем ddccontrol с параметром -p
ddccontrol -p
и ждём, пока программа найдёт имеющиеся в системе мониторы и определит их параметры. У меня в системе найдены два устройства: dev:/dev/i2c-4 и dev:/dev/i2c-3. Первый определился как PHLC05D [Philips standard LCD] и далее проследовали его параметры, в частности:
> Brightness and Contrast
  > id=brightness, name=Brightness, address=0x10, delay=-1ms, type=0
    supported, value=90, maximum=100
Нас интересует яркость (Brightness), и нам нужен параметр address для установки значений. Теперь, когда у нас есть всё необходимое, можем запускать, например:
ddccontrol -r 0x10 -w 90 dev:/dev/i2c-4
для установки значения яркости 90. Вывод команды будет такой:
ddccontrol version 0.4.2
Copyright 2004-2005 Oleg I. Vdovikin (oleg@cs.msu.su)
Copyright 2004-2006 Nicolas Boichat (nicolas@boichat.ch)
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program under the terms of the GNU General Public License.

Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-4...
I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/PHLC05D.xml"
Document not parsed successfully.

EDID readings:
 Plug and Play ID: PHLC05D [Philips standard LCD]
 Input type: Analog
=============================== WARNING ===============================
There is no support for your monitor in the database, but ddccontrol is
using a generic profile for your monitor's manufacturer. Some controls
may not be supported, or may not work as expected.
Please update ddccontrol-db, or, if you are already using the latest
version, please send the output of the following command to
ddccontrol-users@lists.sourceforge.net:

LANG= LC_ALL= ddccontrol -p -c -d

Thank you.
=============================== WARNING ===============================

Writing 0x10, 0x5a(90)...
Control 0x10: +/90/100 C [Brightness]
Программа сказала, что наш монитор ей неизвестен, включив в вывод warning. Далее это же предупреждение будет появляться в gddccontrol, поэтому пойдём в директорию с настройками известных мониторов:
cd /usr/share/ddccontrol-db/monitor/
и скопируем файл VESA.xml, дав имя новому файлу в соответствии с опознанной моделью:
sudo cp VESA.xml PHLC05D.xml
Всё. Теперь наш монитор будет определяться как VESA-совместимый, а назойливый warning исчезнет. Пробуем:
ddccontrol -r 0x10 -w 90 dev:/dev/i2c-4
И получаем вывод:
ddccontrol version 0.4.2
Copyright 2004-2005 Oleg I. Vdovikin (oleg@cs.msu.su)
Copyright 2004-2006 Nicolas Boichat (nicolas@boichat.ch)
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program under the terms of the GNU General Public License.

Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-4...

EDID readings:
 Plug and Play ID: PHLC05D [VESA standard monitor]
 Input type: Analog

Writing 0x10, 0x5a(90)...
Control 0x10: +/90/100 C [Brightness]
Команда длинная, сделаем для неё alias. А точнее, создадим функцию bright (т.к. alias'ы не поддерживают передачу параметров) и сохраним её в файле ~/.bashrc:
function brigth() { ddccontrol -r 0x10 -w "$@" dev:/dev/i2c-4; }
Теперь, завершив сессию пользователя для перечитывания файла ~/.bashrc, мы сможем менять яркость, выполнив простую команду:
bright 70
Вот и всё. Также можно пользоваться удобным GUI, вызывая gddccontrol. Для этого поместим на панель новый апплет (среда Mate/Gnome-2), выберем тип Custom application launcher и впишем туда одно слово:
gddccontrol

Жить стало удобнее :)


Использованы материалы:
http://www.techytalk.info/debian-ubuntu-gddccontrol-non-root/
http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/