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


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

20 июл. 2009 г.

Восстановление GRUB2

Вчера я совершил страшное – обновил grub2 на своём Debian'е и на все вопросы установщика отвечал нажатием Enter, т.е. дал ответы по умолчанию. А делать так не следовало, потому что grub2 сломался и компьютер не грузился.

Здесь я расскажу, ка я его починил.

Я нашёл Live CD с Ubuntu (ну, какой был :), в принципе, любой подошёл бы) и загрузился с него. Прямо с этого диска восстановиться не удалось, потому что мой Debian на архитектуре AMD64, а Ubuntu – i386. Мне нужно было найти что-то загрузочное с той же архитектурой, что и мой Debian.

Немного погуглив, я обнаружил, что у Debian'а тоже есть Live CD, и даже Live USB. Найти можно здесь: http://live.debian.net/debian-cd/5.0.1/amd64/usb-hdd/ . Мне не нужны были красивости рабочего стола, поэтому я скачал просто образ для восстановления. Чтобы записать его на флешку, нужно выполнить команду (которая УДАЛИТ ВСЮ ИНФОРМАЦИЮ С ФЛЕШКИ):

# dd if=/path/to/the/debian-live-501-amd64-rescue.img of=/dev/sdX


Здесь /path/to/the/ директория, где хранится образ, /dev/sdX – устройство USB-накопителя, которое к моменту выполнения команды должно быть размонтировано.

После того, как образ был записан, я просто перезагрузился с флешки.

Все дальнейшие действия подразумевают, что выполняющий их знает, на каком разделе что у него находится. Если нет уверенности, можно поочерёдно примонтировать каждый раздел, скажем, в /mnt, посмотреть и даже записать, чтобы не убить систему окончательно.

У меня разделы расположены так:

/dev/sda5 -- /
/dev/sda2 -- /boot


Поэтому на восстановительной системе я делал следующее:

# mount /dev/sda5 /mnt
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount /dev/sda2 /mnt/boot


Или по-русски:

1. Примонтировали корневой раздел жёсткого диска в /mnt;
2. "Приязали" /dev к новому корню;
3. То же самое с /proc;
4. Примонтировали /boot к новому корню.

Всё это делалось для того, чтобы сделать:

# chroot /mnt


т.е. чтобы поменять корень и работать практически в своей системе.

И последний штрих:

# grub-install /dev/sda


И всё! :)

14 июн. 2009 г.

ImageMagick: изменить размер всех изображений в директории

Довольно часто возникает задача все изображения, только что сброшенные с web-камеры, уменьшить, чтобы разместить в своём фотоальбоме какой-нибудь социальной сети отправить по электронной почте. Конечно, есть GIMP, но это хорошо, если изображений штук 10. А если их 100? 1000?

На этот случай есть такой чудесный комплект консольных утилит, как Imagemagick, который умеет делать с изображениями практически всё.

Для уменьшения изображения достаточно ввести команду:

$ convert -resize 75% -quality 80 image.jpg resized_image.jpg

В результате мы получим изображение размером 75% от исходного (image.jpg) с качеством 80% в файле resized_image.jpg.

Теперь нам нужно выполнить эту команду для всех файлов директории:

$ for i in `ls *.jpg`; do convert -resize 75% -quality 80 $i resized/$i; done

Теперь все файлы с расширением *.jpg в текущей директории будут уменьшены до 75% с качеством 80% и записаны в директорию ./resized, которая должна существовать.

Теперь можно все изображения отправлять на одноклассники по электронной почте.

12 июн. 2009 г.

SSH-туннель

Иногда мне нужно поработать с удалённой БД PosgreSQL через pgAdminIII. Сервер, на котором крутится база, из интернета недоступен. Зато доступен другой сервер, с которого можно попасть на сервер БД. Чтобы мой pgAdminIII мог добраться до PostgeSQL, я пробрасываю туннель с моей машины на сервер с БД через доступный мне сервер. Примерно так:

$ ssh -f -L 15432:postgresql.server:5432 i.can.get.here -N

Что делает эта команда?

Во-первых, она соединяется с сервером i.can.get.here.
Во-вторых, соединение происходит в фоновом режиме (ключ -f).
В-третьих, все запросы на мой локальный порт 15432 перенаправляются на порт 5432 сервера postgresql.server через сервер i.can.get.here (-L 15432:postgresql.server:5432).
В-четвёртых, не выполняет на удалённом сервере команду, которая выполняется при обычном входе.

Теперь, чтобы добраться до БД, я могу в pgAdminIII настроить соединение с localhost:15432, или выполнить команду:

$ psql -h localhost -p 15432 -U username -W password


Такое же туннелирование можно использовать, если, например, вам закрыли порты для почты или ICQ, но у вас есть доступ к прокси. :)

10 июн. 2009 г.

Установка VirtualBox в Debian

В последних версия тестового Debian'а есть несоответствие версий пакета virtualbox-ose и virtualbox-ose-modules, из-за чего virtualbox не работает.

Чтобы обойти этот недочёт мэйнтэйнеров пакетов, нужно пересобрать пакет virtualbox-ose-modules из исходников. Делается это так.

1. Устанавливаем нужные пакеты:

# apt-get install virtualbox-ose virtualbox-ose-source virtualbox-ose-guest-source module-assistant


(virtualbox-ose-guest-source, вообще говоря, необязателен)

2. "Готовим" пакет для сборки:

# m-a prepare virtualbox-ose


3. Собираем и устанавливаем:

# m-a a-i virtualbox-ose


4. Повторяем шаги 2 и 3 для virtualbox-ose-guest-source.

5. Добавляем себя в группу vboxusers:

# adduser `whoami` vboxusers


6. Если вендовые привычки ещё не искоренены, то можно перезагрузиться и работать. Но лучше сделать:

# modprobe vboxdrv


И работать.

GNOME: убрать иконки с рабочего стола

Одна из причин, по которой я не люблю Windows – это иконки на рабочем столе. Если посмотреть на рабочий стол среднестатистического клерка, то там можно обнаружить кучу иконок со всякой ерундой, аккуратно расставленных вокруг переднего плана обоев. Как правило, среднестатистический клерк разворачивает окна всех приложений (кроме QIP и Skype, пожалуй) на весь экран, поэтому для доступа к нужной ему информации он в лучшем случае сворачивает окна, или, как правило, закрывает и ищет по множеству папок на рабочем столе нужный ему файл. Наблюдать за этим процессом забавно первые три раза, потом это просто раздражает.

Вот и меня раздражает наличие этих самых иконок, которые всё равно мною практически никогда не используются.

Раньше я пользовался fluxbox'ом, потом некоторое время сидел на WindowMaker. Оба оконных менеджера лёгкие, быстрые и просто конфигурируемые. Для слабых машин как раз то, что надо. И иконок на рабочем столе у них нет (хотя добавить можно).

Но со временем я всё-таки решил пересесть на GNOME, поскольку он, всё-таки, DE, а не просто WM.

И всё меня в GNOME устраивало, кроме этих самых иконок для рабочего стола. Но немного погуглив и поковырявшись в настройках, я нашёл способ убрать иконки.

Делается это так:

1. Открываем gconf-editor (Приложения->Системные->Редактор конфигурации).

2. Снимаем галочку со свойства /apps/nautilus/preferences/show_desktop

Всё! :)

9 июн. 2009 г.

Вставка кириллицы из X-приложений в Emacs

Часто бывает нужно вставить в Emacs кириллический текст из X-приложения, скажем, из браузера. Но вместо привычного и горячо любимого моноширного шрифта, почему-то вставляются кириллические символы с засечками.

Эта проблема решается примерно так:

1. В файл ~/.Xdefaults добавляем строки:

Emacs.FontBackend: xft
Xft.hinting: none
Xft.dpi: 96


2. Выполняем команду:

$ xrdb -merge ~/.Xdefaults


3. В ~/.emacs добавляем:

(set x-select-request-type (quote (UTF8_STRING COMPOUND_TEXT TEXT STRING)) t)


или где-то в секции custom-set-variables вставляем строку

(custom-set-variables
;;; ...
'(x-select-request-type (quote (UTF8_STRING COMPOUND_TEXT TEXT STRING)) t)
;;; ...
)


Часть информации взята отсюда.

nXhtml-mode для шаблонов Template::Toolkit и HTML::Template

Есть такое замечательное дополнение к Emacs – nXhtml, которое умеет работать с (X)HTML, CSS, JavaScript и много чем ещё одновременно. Более того, nXhtml может работать даже с шаблонами Template::Toolkit. HTML::Template не поддерживается, и есть проблемы с подсветкой синтаксиса (в силу самого синтаксиса HTML::Template), но всё же лучше плохая подсветка, чем никакой.

Чтобы включать правильный nxhtml-mode при загрузке файлов TT и HTML::Template, нужно добавить в ~/.emacs:

;;; NXHTML
(load "~/emacs/nxhtml/autostart.el")
(require 'nxhtml-mumamo)
(add-to-list 'auto-mode-alist '("\\.tmpl$" . nxhtml-mumamo-mode))
(add-to-list 'auto-mode-alist '("\\.tt2*$" . tt-html-mumamo-mode))


При этом сам nXhtml должен находиться в папке ~/emacs/nxhtml/autostart.el.

Генерация классов для DBIx::Class

При создании приложения на Catalyst'е с бэкэндом DBIx::Class можно воспользоваться хэлпером самого каталиста:

$ script/myapp_create.pl model MyAppDB DBIC::Schema MyAppDB \
dbi:SQLite:myapp.db '' '' '{ AutoCommit => 1 }'

См. тут.

Этот способ хорош, если база данных создана давно и почти не меняется. Но если база большая, сложная и в неё часто добавляются новые схемы, то перестраивать заново все классы для всех таблиц, мягко говоря, неразумно. С другой стороны, далеко не все драйвера БД поддерживают работу со схемами (DBD::Pg, например, не поддерживает), и для таких баз генерируются классы только для главной схемы.

Чтобы сгенерировать класс для какой-то отдельной схемы, нужно в консоли ввести команду:

perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:./lib -e \
'make_schema_at("MyApp::MyAppSchema::DBSchema", { debug => 1, db_schema => "dbschema" }, \
[ "dbi:Pg:dbname=dbname","user","password", { AutoCommit => 1 } ])'


Эта команда создаст классы для таблиц из схемы базы данных dbschema в директории ./lib/MyApp/MyAppSchema/DBSchema/, а так же класс схемы ./lib/MyApp/MyAppSchema.pm, в котором пропишет доступ к базе PostgreSQL dbname для пользователя user с паролем password и отключит транзакции.

Выделенные фрагменты нужно заменить на реальные данные.

Настройка карты broadcom bcm4312 wireless, laptop hp 6730s, Debian sqweeze

Ура-ура-ура!

Карта заработала. При настройке пользовался how-to отсюда.

Если лень ходить по ссылке, копирую всё оттуда с небольшой ретушью.

Пункт 6 я не делал, потому что в папке /etc/modprobe.d/ создаётся файл broadcom-sta-common.conf, в котором эта ситуация разруливается.

1. потребуется установить, при отсутствии оного, module-assistant:

$ aptitude install module-assistant


2. устанавливаем пакет

$ aptitude install broadcom-sta-common broadcom-sta-source


3. выполняем

$ m-a prepare
$ m-a a-i broadcom-sta-source


на этом непосредственно установка драйвера завершена

4. далее добавим необходимые модули драйверов на подгрузку при запуске системы, т.е. впишем их (редактором) в файл /etc/modules:

lib80211_crypt_tkip
wl


5. в файл /etc/modprobe.d/blacklist.conf добавим следующую строку:

blacklist ssb


для блокировки ненужного теперь модуля ssb, после выполняем

$ update-initramfs -u


6. перезагружаемся

7. командой

$ iwconfig


проверяем, запустился ли искомый беспроводной интерфейс, если да - далее дело выбора ПО для работы с сетями (будут ли это network manager'ы из Вашего DE или еще что, выбор за Вами, детали - в гугле).

p.s. все действия выше выполняются администратором


Вот и всё! Осталось найти какую-нибудь сеть и протестировать.

3 дек. 2007 г.

Пробуем...

В связи с покупкой ЖЖ «СУПом», пробую перенести блог сюда.