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, изменения будут применяться для новозапущенных/перезапущенных приложений.