2012-03-04

Падение скорости бэкапа Veeam Backup & Replication

Если наблюдается падение производительности Veeam Backup&Replication при бэкапе >1 ТБ данных - нужно отключить нахрен дедупликацию. Дедупликация любого уровня самым сильным образом сказывается на задумчивости вима, заставляя его задумываться на простейших операциях и в десятки раз снижая скорость. Точно актуально до 6й (актуальной на данный момент) версии включительно.

2012-02-28

Настройка Veeam Backup & Replication в режиме Direct SAN Access с СХД EMC CLARiiON

Столкнулся с несколькими проблемами при настройке сабжа, думаю, стоит написать правильный вариант настройки.

В моем случае я настраивал связку СХД EMC CLARiiON CX4-120 (2 шт.) связанное по Fiber Channel, в качестве железного сервера было лезвие Dell PowerEdge M610 с Windows 2008 R2, для бэкапа использовался Veeam backup & Replication 6.

  1. Перво-наперво, перед установкой ОСи, стоит отвязать сервер от СХД. В моем случае я сделал это правкой зоны на FC-свиче. Крайне желательно, чтобы сервер не видел никаких лишних дисков.
  2. Ставим ОСь. Мега крайне желательно использовать Win 2008 R2, так как  в ней есть нативный MPIO, ака MultiPath I/O.
  3. После установки ОСи добавляем штатную Feature "Microsoft  MPIO". Перезагружаемся.
  4. Ставим вим. Настройку оставляем на потом, просто ставим. При установке вима автоматом отключается автомонтирование новых дисков, что нам пригодится.
  5. После установки вима следует подцепить СХД, при этом в менеджере дисков обнаружатся LUN'ы с VMFS, при этом, если актуален MPIO, - будет много дублей (если LUN'ы не видны, не определяется их размер - возможно у вас установлен Касперский). Перезагружаемся.
  6. Заходим в Control Panel -> MPIO, на второй вкладке должно быть видно устройство, которое можно выделить и нажать ADD - это наша СХД. Если подключено несколько СХД - будет несколько устройств, по одному на СХД (в моем случае, по крайней мере, было так). Добавляем СХД, перезагружаемся.
  7. В менеджере дисков количество оных должно уменьшиться, при этом некоторые диски будут отмечены на Healthy, на них будут видны размеченные разделы (файловая система не определится, разумеется). На других дисках будет написан статус Unknown, на них не будет видно никаких разделов. Важно: диски будут помечены как offline, включать и инизиализировать их вручную НЕЛЬЗЯ.
  8. Для того чтобы Veeam смог работать в СХД напрямую, нужно заставить винду видеть исключительно все LUN'ы как Healthy диски. Для этого, если речь идет про CLARiiON, нужно поставить софт от EMC - PowerPath. Я ставил PowerPath 5.5, версии без лицензии вполне достаточно. После перезагрузки все ЛУНы будут определены.
  9. Настраиваем Veeam.

2012-02-10

Как настроить прокси в Google Chrome (отличный от системного)

На данный момент Хром использует системные настройки прокси, и через интерфейс прописать отличный прокси нельзя. Однако, можно заставить хром использовать не системный прокси, указав его параметром командной строки при запуске:

--proxy-server=IP-адрес

В Windows, например, можно изменить ярлык:

«"C:\..\chrome.exe" --proxy-server=IP-адрес»

2011-12-05

2011-09-27

The Bat: Regexp is wrong: regular expression too large

идем в Настройки - Предупреждения и меняем список запрещённых файлов на используемый по умолчанию:
*.EXE,*.COM,*.BAT,*.CMD,*.VBS,*.PL,*.BAS,*.JS,*.JAVA,*.REG,*.SHS,*.PIF,*.SCR,*.D
LL,*.SSH,*.CHM,*.HLP,*.LNK,*.{*},*.PIF,*.SCR,*.SHS,*.PIF,*.SCR,*.SHS,*.{*}

2011-08-31

Как определить в какой порт на циске включен компьютер?

Давненько я не писал ничего. Однако пару лет назад мне довелось с проблемой поиска потерянного среди цисок компа, которую мне удалось для себя приемлемо решить.  Так как полный текст был написан в гуглодоксах и не захотел легко, просто и без потерь перекопироваться сюда, просто оставлю ссылку на гуглодок.

https://docs.google.com/document/pub?id=1QmUqSV2t-aQ1GMEvv9cqIFuCR5GnVTrbvQ3evHMubJU

2010-11-17

Ошибка acad 2000

Ошибка acad 2000:

---------------------------
Предупреждение AutoCAD
---------------------------
Возможно, файл настройки (.cfg, .bak) занят другим
процессом или имеет атрибут "только чтениt".
Исправьте и нажмите "Повторить"; кнопка "Отмена" прерывает операцию.
---------------------------
Повтор Отмена
---------------------------

Фиксится добавлением юзера в опытные пользователи и/или первичным запуском акада из-под администратора

2010-05-12

Настройка nginx как фронтэнда для apache2, и установка eaccelerator

Выражаю благодарность автору статьи: http://rubuntu.ru/blog/server/435/nastrojka-apache-2-nginx-php-5-mysql-memcached-eaccelerator-sphinx-v-ubuntu.html

Рассматривается настройка на примере Debian/Ubuntu, в частности я использовал Ubuntu 8.04 с установленным и уже настроенным апачем.

Часть первая: nginx.

Все очень просто. Устанавливаем nginx:
sudo aptitude install nginx


Говорим апачу слушать 81 порт локалхоста, исправив строчку в /etc/apache2/ports.conf :
Listen 127.0.0.1:81

Говорим апачу убивать себя, /etc/apache2/apache2.conf:

KeepAlive Off

Далее, допустим у нас есть сайт, по адресу example.com и лежащий в /var/www/example.com/
Прописываем конфиг /etc/nginx/sites-available/example.com:
server {
listen *:80;
server_name examlpe.com

location / {
proxy_pass http://127.0.0.1:81/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}


location ~* \.(jpg|gif|png|css|js)$ {
root /var/www/example.com/;
}

}



Таким образом мы говорим nginx самостоятельно отдавать jpg, gif, png, css и, соответственно, js-файлы.

Делаем симлинк:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Перезапускаем сервисы:
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart

Часть вторая. eAccelerator


Устанавливаем memcached и пару нужностей для eaccelerator:
aptitude install memcached php5-dev make

Устанаваливаем eaccelerator:
cd /tmp/
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
tar xvjf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3
phpize
./configure --enable-eaccelerator=shared
make
make install

Создаем папку кеша
mkdir -p /var/cache/eaccelerator
chmod 0777 /var/cache/eaccelerator

Редактируем конфиг PHP /etc/php5/apache2/php.ini:
[PHP]
; eAccelerator configuration
; Note that eAccelerator may also be installed as a PHP extension or as a zend_extension
; If you are using a thread safe build of PHP you must use
; zend_extension_ts instead of zend_extension
extension = "eaccelerator.so"
eaccelerator.shm_size = "16"
eaccelerator.cache_dir = "/var/cache/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.allowed_admin_path = "/var/www/eaccelerator"


Рестартим все:
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart
sudo /etc/init.d/memcached restart

2010-03-25

Отключение хостов VMWare ESX/ESXi через APC PowerChute

"Данное решение помечено как DEPRECATED - перестало работать на free-версии. Вместо него предлагают использовать
http://communities.vmware.com/docs/DOC-11623" 

http://www.vm4.ru/2010/07/esx-esxi-apc.html




Чтобы избавиться от необходимости устанавливать APC PowerChute на каждую гостевую машину, можно использовать скрипт погашения хоста (с предварительным выключением виртуальных машин на нем), стартующий по команде PowerChute, установленного на отдельную виртуальную машину.

Потребуется
  1. vSphere Management Assistant (vMA) - образ нужной виртуальной машины (на данный момент v4.0, требуется зарегистрироваться на сайте VMWare)
  2. APC PowerChute Network Shutdown - «парашют», версия для Linux (на данный момент v2.2.4, требуется зарегистрироваться на сайте APC)
  3. Скрипты «ESX/ESXi APC/APCUPSD Host Shutdown VI Perl Toolkit Script»:
    upsVIShutdown.pl (1.9 K) и ghettoShutdown.pl (5.1 K)

Установка

Устанавливаем vMA на ESX/ESXi



При первом старте настраиваем сетевой интерфейс и задаем пароль пользователя vi-admin (мастер ОЧЕНЬ придирчив к сложности пароля).



Забрасываем в домашний каталог скрипты выключения и архив с «парашютом»



Делаем скрипты исполняемыми:
chmod +x upsVIShutdown.pl
chmod +x ghettoShutdown.pl

Распаковываем «парашют»:
tar -xvf pcns224Linux.tar.gz



Переименовываем файл /etc/vima-release:
sudo mv /etc/vima-release /etc/vima-rel

Запускаем инсталляцию PowerChute:
sudo ./install.sh

В процессе установки со всем соглашаемся, при вопросе какую джаву использовать (предлагается вписать путь или нажать энтер для использования встроенной в инсталлятор), не указывая пути нажимаем энтер:



В конце выведется сообщение об успешной установке и предложение продолжить конфигурацию. Запускаем конфигуратор PCNSConfig.sh:
sudo /opt/APC/PowerChute/group1/PCNSConfig.sh




Если, как и в моем случае, имеется 1 ИПБ, выбираем 1й вариант - single UPS device:



Вводим IP упса, порт, имя и пароль администратора, аутентификационную фразу:



Дожидаемся сообщения, что ИПБ не отвечает, соглашаемся сохранить конфигурацию и запустить сервис:



Зайдем в панель управления ИПБ и убедимся что клиент успешно добавился.

Отключим файрволл:
sudo chkconfig iptables off
sudo service iptables save
sudo service iptables stop

Убедимся, что открывается интерфейс по адресу https://IP:6547/login (логин:пароль - apc:apc)

Навесим на нужное событие запуск скрипта /home/vi-admin/upsVIShutdown.pl:




Изменим данный скрипт, прописав свои хосты, которые он должен гасить, и уменьшив интервал, с которым он будет гасить гостевые машины, до 2х секунд:





Последний шаг - привязываем хосты, чтобы гостевая ОС имела право их гасить:
sudo bash
ipvf addserver servername1.domainname
ipvf addserver servername2.domainname
...
ipvf addserver servernameN.domainname
vifpinit

Отвечаем Yes на вопрос о сохранении авторизационной информации:
This will store username and password in credential store which is a security risk. Do you
want to continue?(yes/no): yes

Проверяем привязку, выведя список подключенных хостов:
vifp listservers

При срабатывании, скрипт отдаст команду погасить виртуалки и хосты, прописанные в конфиге. Саму виртуалку отключать через «парашют» не обязательно.

2010-02-25

Настройка VPN-сервера PPTPD в Ubuntu и подключение Windows-клиентов

Захотелось связать несколько удаленных компьютеров в одну локальную сеть. Сказано - сделано.


Настройка сервера.


Берем сервер с ubuntu (или debian), доступный для клиентов через интернет. Ставим необходимое:

sudo aptitude install ppp pptpd

Приводим следующие файлы к подобному виду:

/etc/pptpd.conf
~~~~~~~~~~~~~~~~~~~~~~~~~~
option /etc/ppp/pptpd-options
logwtmp
localip 10.1.1.1 # адрес сервера в создаваемой виртуальной сети
remoteip 10.1.1.50-59 # адреса, раздаваемые клиентам

(диапазоны адресов не должны пересекаться с уже используемыми клиентами в их реальных сетях)

/etc/ppp/pptpd-options
~~~~~~~~~~~~~~~~~~~~~~~~~~
lock
name pptpd
nodefaultroute
refuse-pap
refuse-mschap
require-mschap-v2
#require-mppe-128 # шифрование. В теории должно работать, на практике у меня не вышло его завести
proxyarp
nodefaultroute


cat /etc/ppp/chap-secrets
~~~~~~~~~~~~~~~~~~~~~~~~~~
# Secrets for authentication using CHAP
# client server secret IP addresses
user pptpd password *
user2 pptpd password2 10.1.1.54

(заводим пользователей, указываем пароли и, опционально, айпишники, которые они будут получать)

После настройки перезапускаем демона:
sudo /etc/init.d/pptpd restart

Настройка клиентов.


XP:

Открываем список сетевых соединений и запускаем мастера создания подключений:


Выбираем подключение использующее VPN или модемное соединение


Выбираем VPN


Вбиваем имя для соединения


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


Указываем адрес сервера


Удобства ради добавляем ярлык соединения на рабочий стол и закрываем мастера



Далее открывается окно с вводом имени и пароля. Перед этим заходим в свойства:


На вкладке безопасности снимаем галку шифрования:


Если не предполагается использование клиентами интернета через наш сервер, на вкладке открываем свойства TCP/IP, в новом окне открываем дополнительные настройки и снимаем галку использования маршрута по умолчанию:


Применяем все изменения, вводим имя и пароль

2009-12-27

Установка и допиливание Lubuntu

Для друга, имеющего Eee PC 701, заснял пару скринкастов с установкой и первичным допиливанием Lubuntu. Слабо представляю возможную целевую аудиторию, но может кому и будет полезно залицезреть процесс. Снимался каст с виртуалбокса, разумеется предварительно все было проверено на целевой ееешке.

Часть первая: установка оси (67.9 МБ)
Использовался DVD убунты. Неграфическая установка системы в режиме "хочу консоль онли", с последующим натягиванием lubuntu-desktop и gdebi. Разбиение диска "все под root".

Часть вторая: допиливание (53.9 МБ)
Установка обновленного pcmanfm для исправления бага с ассоциациями приложений. Установка gXneur и Google Chrome. Добавление русской раскладки (тут меня можно отдельно покусать за решение). Поверхностная пробежка по фейсу, панелькам.

В целом, как я сказал, писалось для друга-эдвансд-виндузядника, имевшего дело с убунту но не переустанавливавшего ее самостоятельно, так что этот скринкаст определенно будет слишком сложен для кого-то одного, и слишком скучен для кого-то другого - я гарантирую это =)

2009-12-06

Простой шлюз из Linux & PS3 через Yota

Для начала немного о моем домашнем интернете. У меня их два:
1. первый (Inet1) - обычный домашний интернет через локалку
2. Yota, втыкаемая в ноутбук

Схема:


Notebook - Yota
|
Inet1 - Router - Srv
|
PS3


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


Итак, на повестке дня 2 вопроса:
1. Как из компа под линуксом сделать простеший шлюз?
2. Как настроить PS3 для работы через шлюз в целом, и через Yota-инет в частности?

Ответы на оба вопроса элементарны. Чтобы линуксовый комп стал шлюзом, достаточно выполнить:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -P FORWARD ACCEPT
# iptables -t nat -A POSTROUTING -j MASQUERADE

Разумеется, все интерфейсы, которые предполагается использовать, должны быть настроены. В моем случае одним интерфейсом является подключенная Yota, а второй имеет адрес (192.168.1.5) внутри локальной сети (192.168.1.0/24).

Теперь о PS3. Заходим в настройки сети и вбиваем все руками. Отмечу стратегически важное:
IP - 192.168.1.50 (свободный айпишник внутри локальной сети)
Маска - 255.255.255.0 (используемая в локальной сети)
Шлюз - 192.168.1.5 (локальный адрес йотового компа-шлюза)
DNS - 8.8.8.8 (гугловский DNS-сервер)
DNS - 8.8.4.4 (еще гугловский DNS-сервер)
MTU - 1400 (с другими работать отказалась, возможно тут скрывается йота-особенность)
UPnP - выключить
Прокси - не использовать

С такими настройками приставка радостно ломится в ноут за инетом и получает его от йоты, гип-гип ура и все такое =)

2009-09-16

Как сохранить полный вывод консоли?

Бывает возникает желание сохранить все, что происходит в терминале. Вывод одной программы, конечно, можно перенаправить в файл, а небольшой кусочек просто скопипастить. Но если коннектишься к удаленному серваку (в моем случае вообще - циске) и долго и упорно его конфигуришь, эти подходы могут быть не очень подходящими. На эти случаи есть замечательная команда «script». Формат:

script имя_файла_лога

после выполнения скрипт начинает сохранять все вводимые комманды и ответ терминала на них. Для окончания записи нужно ввести просто

exit

2009-09-15

Тормоза и повисание VirtualBox при использовании DameWare Remote Control

Сидя в линуксе, я использую DameWare Remote Control из-под виртуалбокса для управления вин-машинами. Начиная с какой-то версии VirtualBox начал подвисать как только я коннектился к удаленной машине. Решение оказалось простым: чтобы избежать подвисания следует зайти в меню «View» и, выбрав пункт «Local Global Options...», снять галку «Warning Border on Connect» — во всем виновато анимированное обрамление окна удаленной машины.

2009-05-20

Подвисание диалогов открытия и сохранения файла в Ubuntu 9.04

Проблема проявилась после обновления Ubuntu 8.10 до 9.04. Симптом — при попытке открыть или сохранить что-либо, происходило зависание приложения секунд на 15, после чего диалог успешно открывался. Метод лечения:

cd ~/.cache && rm -rf tracker && ln -s /var/tmp/${USER}-tracker/cache
cd ~/.local/share && rm -rf tracker && ln -s /var/tmp/${USER}-tracker/local

2009-05-13

Как в linux быстро и просто проверить, жив ли сервер?

Озаботился вопросом — как проверить на живость сервер и сервисы на нем? В моем случае это ряд цисок, файлсервера, да сервак Exchange. Разворачивать какую-то систему слежения там, где достаточно пинга да проверки портов, показалось слишком сложным. Бродя по инету наткнулся на довольно просто скриптец, использующий nmap для проверки открытых портов. Слегка попилив пришел к следующему:

#!/bin/bash
# оригинальный скрипт: http://habrahabr.ru/sandbox/2096/
#
# Для работы требуются: nmap, libnotify-bin. Также
# необходимо создать рядом со скриптом файлик "servers",

# содержащий инфу об интересующих серверах в виде
# IP:PORT COMMENT, например:
#
# 192.168.310.254:443 1й снизу в левой стойке
# 192.168.410.254:80 вторая стойка, 3й снизу
#

# хватаем по строчке из списка, выхватываем часть до комментария,
# преобразуем двоеточие в " -p " и подсовываем nmap'у. Если последний
# не находит открытый порт на айпишнике — айпишник с портом записываются
# в файл serverlist (создается рядом со скриптом)
#
cat servers | while read line; do nmap `echo "${line}" | awk '{print($1)}'| sed -e 's/:/ -p /'` | grep -q "/tcp *open" || echo "${line}"; done > serverlist;
#
# Если serverlist не пуст, скидываем инфу о времени
# и инфу из serverlist в файл log (создается рядом со скриптом)
#
if (!( [ -z $(cat serverlist) ])); then
echo $DATENOW >> log
cat serverlist >> log
#
# для каждого айпишника из serverlist находится полная строка
# в servers (с комментарием). В начало каждой втыкается
# смайлег ಠ_ಠ, а в конце делается дополнительный перенос.
# Все это ложится в файл serverlist1, содержимое которого
# отправляется как системное уведомление.
#
cat serverlist| while read megaline; do grep "${megaline}" "servers"| sed -e 's/^/ಠ_ಠ /' | sed -e 's/$/\n/' ; done > serverlist1;
notify-send --expire-time=100000 АТАС-АТАС!! "`cat serverlist1`"

fi
exit

Итого: легко и просто пиная скрипт cron'ом, мы проверяем живы ли наши сервера, и в случае абзаца наблюдаем в трее кто потерялся.

ЗЫ: А для раскраски синтаксиса был использован сервис http://highlight.hohli.com/

2009-04-23

Рваное изображение при просмотре HD-video в Linux

Долгое время мучился с проблемой — при просмотре HD-video (особенно 1080p, хотя и 720p тоже) в моей Ubuntu картинка разрывалась, словно сверху уже отрисовался новый кадр, а снизу остался старый. На боль-мень динамичных сценах из-за этого проявлялась четкая линия границы с некислым искажением, хотя скорость отрисовки кадров не страдала. Долгое время грешил на настройки MPlayer, на видеодрайвер, на железо в конце-концов. Оказалось, явление такого разрыва называется tearing, а сама проблема легко гуглится по "compiz tearing". Пока что нашел единственное решение — отключить нафиг Compiz (в Ubuntu — «Система → Параметры → Внешний вид → Визуальные эффекты», галка «Без эффектов»)

Скрипты в Nautilus

Замечательная штука — скрипты файлового менеджера Nautilus. Нужно открыть консоль в текущей папке? Открывать консоль, cd /путь/до/папки... а если папка глубоко... брррр. Куда проще тыкнуть правой мышкой в свободное место открытой папки, да выбрать «Сценарии → term_here»




Что особенно приятно — добавляются эти скрипты легко и просто. Представляя из себя обычные текстовые шелл-скрипты, они кладутся в ~/.gnome2/nautilus-scripts/ и незамедлительно проявляются в вышеуказанной менюшке. Написать что-то простенькое под свои нужды также ничуть не сложно, если есть базовые понимания шелл-скриптинга (как у меня =)). Небольшой пример — написанный мною скрипт, закачивающий в текущую папку файл из скопированного в буфер обмена линка. Закачать можно при помощи wget'а в один поток, или axel'я — в 2 или 4 потока на выбор. После скачивания выдается сообщение что файл слит ).

Мега скрипт:

#!/bin/bash

XCLIP_CMD=/usr/X11R6/bin/xclip

if [ ! -e $XCLIP_CMD ] ; then
if [ -z `which $XCLIP_CMD` ] ; then
zenity --error --text="xclip not found!

Please put xclip on your search path or edit XCLIP_CMD in the script:
$0"
exit 1
fi
fi

Стандартное начало баш-скрипта и проверка наличия утилиты xclip, которая будет выплевывать из буфера обмена скопированный туда линк. В случае необнаружения утилиты в заданном месте, вызывается утила zenity, рисующая матерные выражения в предупредительном окошке.

FILE=`xclip -o`

DOWNLOADER=$(gdialog --title "Download with... (\"`echo $FILE`\")" --radiolist "Downloaders" 60 100 10 1 wget on 2 axel*2 off 3 axel*4 off 2>&1)

Кладем скопированную ссылку в переменную FILE, а далее используем утилиту gdialog для рисования окошка:



При этом, в зависимости от выбора, переменной DOWNLOADER присваивается значение от 1 до 3, которое мы тут же и обрабатываем:

if [ $DOWNLOADER = "1" ]; then
wget "`echo $FILE`"
gdialog --title "Download complete" --msgbox "File: \"`echo $FILE`\"" 20 500
fi

if [ $DOWNLOADER = "2" ]; then
axel --num-connections=2 "`echo "$FILE"`"
gdialog --title "Download complete" --msgbox "File: \"`echo $FILE`\"" 20 500
fi

if [ $DOWNLOADER = "3" ]; then
axel --num-connections=4 "`echo "$FILE"`"
gdialog --title "Download complete" --msgbox "File: \"`echo $FILE`\"" 20 500
fi

В зависимости от значения DOWNLOADER качаем файл соответствующей качалкой, после чего выводим сообщение с заголовком «Download complete» и телом, состоящим из строки «File: "ссылка-на-файл"»


Конечно это очень упрощенный вариант, в котором много чего не предусмотрено, например — ссылка фактически вставляется не из того буфера, который CTRL+C/V, а из того который работает по выделению и средней мышке. То есть если скопировать в буфер линк, после чего выделить кусок текста, то линк уже не скачается. Но несмотря на недоработки, скрипт вполне рабочий и достаточно прост, как мне кааца, для понимания.

Коллекцию скриптов, куда более удачных чем мой, можно найти вот тут.

2009-04-12

Свои сочетания для Compose Key

Иногда мне хочется попонтоваться и поюзать в своей письменной речи всякие стильные фичи, например длинное тире "—", или даже так «—», а может даже напи́сать... ой, написа́ть слово с ударением! В этом здорово помогает линуксоидам такая хренотень как «Compose Key». «Compose Key» — это такая кнопка, после которой можно ввести сочетание других кнопок и получить какой-нибудь приятный результат. Например чтобы получить «—» надо нажать последовательно «Compose Key» и три раза «-». А чтобы ввести открывающую кавычку — «Compose Key» и два раза «<», закрывающую — «Compose Key» и два раза «>».

При этом, сам «Compose Key» на клавиатуре может быть любой ненужной кнопкой, в моем случае это правый CTRL, который сам по себе мне не нужен. Задается это в /etc/X11/xorg.conf, путем дописывания в секцию настройки клавиатуры. Примерно так:

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us,ru"
Option "XkbVariant" ",winkeys"
Option "XkbOptions" "grp:lwin_toggle,lv3:ralt_switch,grp_led:scroll,compose:rctrl"
EndSection

Множество комбинаций с «Compose Key» описаны в инете и легко гуглятся, а все возможные комбинации описаны в файлике /usr/share/X11/locale/en_US.UTF-8/Compose, который можно поизучать в свободное время.

Однако, бывает так что начинает хотеться странного. Например долбежка «---» для тире меня не устраивает, мне хочется проставлять тире одиночным нажатием на минус.

Для того чтобы иметь возможность задавать пользовательские сочетания с «Compose Key», нужно совершить пару простых телодвижений.

Во-первых надо открыть или создать, если его не существует, файл ~/.profile и прописать туда две строки:
export GTK_IM_MODULE=xim
export QT_IM_MODULE=xim

Во-вторых нужно создать файл ~/.XCompose и вписать в него первой строкой
include "/usr/share/X11/locale/en_US.UTF-8/Compose"

что применит все дефолтные настройки, а после дописать нужные комбинации. Например у меня дописаны:
<Multi_key> <0> <0>: "́" U0301 # ударение
<Multi_key> <minus> <space>:" — " # тире
<Multi_key> <less> <minus> : "←" U2190 # <-
<Multi_key> <minus> <less> : "←" U2190 # -<
<Multi_key> <minus> <greater> : "→" U2192 # ->
<Multi_key> <o> <underscore> <o> : "ಠ_ಠ"

и еще несколько забавных строк =)

После всего этого нужно перезагрузиться или перезапустить X-сервер. В дальнейшем можно менять файлик ~/.XCompose, изменения будут применяться для новозапущенных/перезапущенных приложений.