27 нояб. 2013 г.

Два монитора для fluxbox

Долгое время я мучился сначала с Gnome 3, потом с Mate, всё не решался пересесть на fluxbox. А всё из-за того, что лень было почитать документацию о том, как настроить два монитора. В принципе, я знал, что это должно быть очень просто с помощью xrandr. Меня останавливало то, что я использую один лаптоп и дома, и на работе, дома у меня экран лаптопа и внешний монитор, а на работе док-станция и два врешних монитора, к тому же один из них стоит вертикально (удобно для консоли).
Но в один прекрасный день меня достал даже Mate, и я сел читать документацию. Всё оказалось даже проще, чем я предполагал.
Итак, первое, что нужно определить, это какие мониторы подключены:
$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
eDP1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 293mm x 165mm
   1366x768       60.0*+   40.0  
   1360x768       59.8     60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
Сейчас я пишу с лаптопа, нет никаких внешних мониторов, поэтому виден только один выход – eDP1. Чтобы изметить выход или конфигурацию текущего выхода (разрешение, ориентацию и т.п.), нужно выполнить команду xrandr с параметрами. Данные для параметров нужно взять из вывода выше. После того, как я выполнил xrandr дома и на работе, я написал два простых скрипта (для дома и для работы), которые пока вызываю вручную:
home.sh
#!/bin/bash

xrandr --output eDP1 --mode 1366x768
xrandr --output VGA1 --mode 1920x1080 --above eDP1
work.sh
#!/bin/bash

xrandr --output HDMI1 --mode 1680x1050 --rotate left
xrandr --output HDMI2 --mode 1920x1080 --right-of HDMI1 --rotate normal
Немного о параметрах:
  • --output <OUT> – видеовыход.
  • --mode <mode> – разрешение.
  • --above, --below, --right-of, --left-of, --same-as <OUT> – положение относительно видеовыхода <OUT>.
  • --rotate [normal|left|right|inverted] – поворот экрана.
У xrandr очень много параметров, но для большинства случаев описанных должно хватить.

Кнопки для fluxbox

Недавно перешёл назад на fluxbox, наслаждаюсь простотой, скоростью и гибкостью. Чтобы быстрее добираться до нужных мне функций, я добавил в ~/.fluxbox/keys следующие строки:

# ======= #
# My keys #
# ======= #

# Commands
# ========
Control Escape :RootMenu
# Привычка вызывать так главное меню у меня осталась ещё со времён Windows 95

Mod1 Mod4 Tab :NextWindow {static groups} (iconhidden=no)
Mod1 Mod4 Shift Tab :NextWindow {static groups} (iconhidden=no)
# Иногда полезно пройтись по всем окнам на всех рабочих столах

Mod4 Escape :WorkspaceMenu
# Вообще-то я хотел иметь возможность посмотреть, какие окна у меня открыты на текущем
# рабочем столе, но я не нашёл такой команды. Да и не искал :), так что пока так.

Control Mod1 l :Exec /usr/bin/xscreensaver-command -lock
# Блокировка экрана

Control Mod1 Shift w :Exec work.sh
Control Mod1 Shift h :Exec home.sh
# Вызываю скрипты

# Applications
# ============
Control Mod1 e :Exec emacs
Control Mod1 t :Exec x-terminal-emulator
Control Mod1 c :Exec conkeror
Control Mod1 m :Exec icedove
# Наиболее часто используемые приложения

# MPD
# ===
Mod1 Mod4 Right :Exec mpc next
Mod1 Mod4 Left  :Exec mpc prev
Mod1 Mod4 Up    :Exec mpc play
Mod1 Mod4 Down  :Exec mpc pause
# Управление mpd

# Volume
# ======
XF86AudioRaiseVolume :Exec pactl -- set-sink-volume 0 +5%
XF86AudioLowerVolume :Exec pactl -- set-sink-volume 0 -5%
XF86AudioMute        :Exec pactl -- set-sink-mute 0 toggle
# Управление громкостью с помощью мультимедийных клавиш

Mod1 Mod4 Mouse4 :Exec pactl -- set-sink-volume 0 +5%
Mod1 Mod4 Mouse5 :Exec pactl -- set-sink-volume 0 -5%
Mod1 Mod4 Mouse2 :Exec pactl -- set-sink-mute 0 toggle
# Тоже управление громкостью, только если мультимедийные клавиши недоступны,
# например, их просто нет или лаптор закрыт и стоит на док-станции.

30 янв. 2011 г.

Установка Perl 5.12 на Debian Squeeze.

Я хочу поиграться с Perl 5.12, но на Debian Squeeze по умолчанию стоит 5.10. Собирать deb пакет и замещать текущий Perl я не хочу: если я где-то накосячу и пакет соберётся неправильно, я могу если не убить систему, то подарить ей (а заодно и себе) прекрасный геморрой. Поэтому устанавливать я буду в /opt/perl.

Итак...

Для начала нужно скачать исходники.

$ git clone git://perl5.git.perl.org/perl.git perl-5.12


(Я предпочитаю git, но можно использовать rsync. Подробности здесь.)

И через некоторое время в ~/perl-5.12 у нас есть исходники самой свежей версии.

Далее непосредственно сборка. Чтобы не "портить" директорию с исходниками всяким сборочным хламом, сборку я провожу в отдельной директории, которую, конечно же, нужно сначала создать:

$ mkdir /tmp/perl/build
$ cd /tmp/perl/build/


Теперь конфигурируем (параметр -Dmksymlinks говорит конфигуратору, что в текущей директории нужно создать необходимо создать нужные ссылки):

$ sh ~/perl-5.12/Configure -Dmksymlinks -Dprefix=/opt/perl -des


Собираем:

$ make


Тестируем:

$ make test


И устанавливаем (предпочитаю делать это из-под root'а):

$ sudo make install


И проверяем работоспособность:

$ /opt/perl/bin/perl -E 'say "Hello!";'
Hello!


Ура! :)

1 июля 2010 г.

15 июня 2010 г.

NFS и /etc/exports (unfs3)

После перезагрузки сервера внезапно отвалился NFS. Любая попытка примонтировать удалённую папку ругалась ошибкой:

$ sudo mount -v server:/opt/share $HOME/remote_folder
mount: no type was given - I'll assume nfs because of the colon
mount.nfs: timeout set for Tue Jun 15 23:58:08 2010
mount.nfs: text-based options: 'addr=1.2.3.4'
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting server:/opt/share


Я использую unfs3. Все попытки заставить его работать, магия с опциями в /etc/exports, /etc/hosts.deny и /etc/hosts.allow, упорное гугление по всевозможным форумам и документациям, просмотр логов и т.п. ничего не дали. Т.е. вообще ничего.

Оказалось, в /etc/exports у меня была строка:

/opt/music <my-subnet>(rw,sync,no_subtree_check)

Но саму директорию /opt/music я давным давно переместил куда-то и забыл. NFS был запущен ещё до перемещения и работал так примерно месяц. После обновления ядра я перезапустил сервер, unfs3 при попытке примонтировать другие директории спотыкался о /opt/music и отказывал в доступе вообще. Ни в логах, ни в консоли, ни в ответе клиенту ничего об ошибке конфигурации не было сказано.

Вывод: все директории, указанные в /etc/exports должны существовать.

9 авг. 2009 г.

Skype, Debian, amd64 и libuuid1

Только вчера заявил, что проблемы перехода от 32-битной архитектуры на 64-битную меня не коснулись, как у меня перестал работать скайп. Что бы я ни делал, он упорно писал:

$ skype
/usr/bin/skype: error while loading shared libraries: libuuid.so.1: cannot open shared object file: No such file or directory


Произошло это вчера после обновления пакета ia32-libs. Полдня гуглил, искал выискивал, читал перечитывал – никакого результата. Все ссылки вели к объяснению того, что нужно сказать --force-architecture после apt-get install, или aptitude install, или dpkg -i. Всё это хорошо и понятно, но это не помогало.

Но потом как-то нечаянно нашёл я одно позавчерашнее обсуждение (к сожалению, ссылку уже не вспомню), где люди столкнулись с точно такой же проблемой. Один небольшой ответ поставил всё на свои места.

Сам файл libuuid.so.1 в системе есть, находится в директории /lib и является символической ссылкой на /lib/libuuid.so.1.2. Кроме того, есть в корне файловой системы символическая ссылка /lib64, которая ссылается как раз на /lib. Но этот файл всё равно не находился.

Дело в том, что skype – 32-битное приложение, поэтому запускается он в режиме эмуляции через chroot, где вместо /lib64 используется /lib32. А вот файла /lib32/libuuid.so.1 как раз и не было.

Решение



1. Нужно скачать пакет libuuid1_1.41.3-1_i386.deb (или какая там последняя версия):

$ mkdir uuid; cd uuid
$ wget -c http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libuuid1_1.41.3-1_i386.deb


2. Распаковать содержимое пакета:

$ mkdir libuuid1_1.41.3-1_i386
$ dpkg-deb -x libuuid1_1.41.3-1_i386.deb ./libuuid1_1.41.3-1_i386
$ $ ls -la ./libuuid1_1.41.3-1_i386/lib/
итого 24
drwxr-xr-x 2 andrei andrei 4096 Окт 13 2008 .
drwxr-xr-x 4 andrei andrei 4096 Окт 13 2008 ..
lrwxrwxrwx 1 andrei andrei 14 Авг 9 19:08 libuuid.so.1 -> libuuid.so.1.2
-rw-r--r-- 1 andrei andrei 12912 Окт 13 2008 libuuid.so.1.2


3. В директории ./libuuid1_1.41.3-1_i386/lib/ мы видим два файла, которые нужно переписать в /lib32:

$ sudo cp libuuid1_1.41.3-1_i386/lib/* /lib32/


Теперь должно работать.

:)

8 авг. 2009 г.

XChat и "Ошибка сегментирования" (Segmentation fault)

У меня уже довольно давно не работал xchat, вместо него приходилось использовать xchat-gnome, который, если честно, мне не очень-то нравился. Сам xchat просто выдавал segmentation fault при попытке соединиться.

И вот сегодня меня это окончательно достало и я решил разобраться, в чём дело. Форумы убунты и ссылки типа этой советуют удалить xchat-gnome, удалить в домашней директории все настройки xchat (т.е. удалить директорию $HOME/.xchat2) и установить xchat заново.

Этот способ у меня не сработал. Несколько раз не сработал. Тогда я добавил в поисковый запрос слово "Debian" и первый же результат всё объяснил.

Оказывается, xchat падал не при попытке соединения, а при попытке отобразить иконку в трее, что, очевидно, конфликтовало с пакетом xchat-systray. Итак, достаточно было всего лишь сделать

# aptitude remove xchat-systray


чтобы всё встало на свои места.