/ Статьи / Пользова­тельское / Настройка Uzbl /

Настройка Uzbl

Дата публикации: Sept. 10, 2011, 12:16 p.m.
Теги: uzbl, браузер, unixway,
Автор: Brainsburn

uzbl browser Uzbl - аскетичный веб-браузер с минимальным набором функционала "из коробки", который, впрочем, позволяет пользователю перенастраивать управление и расширять функционал с помощью скриптов. Скрипты, реализующие наиболее важные функции (закладки, сессии, история), вы можете найти в архиве с Uzbl. Остальные скрипты предлагается или писать вручную, или поискать в Сети. Название "Uzbl" происходит от слова "usable" и произносится как "юзейбл".

История появления

Однажды в 2009-м на форумах Arch Linux люди задались вопросом - "Какой из веб-браузеров наиболее подходит под философию Unix?". Так как ни один из существующих браузеров не был "юникс-вейным", было решено таковой создать. Dieter Plaetinck, один из разработчиков Arch Linux, принялся реализовывать эту идею и вокруг проекта "Uzbl" быстро сформировалась команда активных разработчиков. Вскоре, 15 июля 2009, на lwn.net появилась статья "Uzbl: a browser following the UNIX philosophy", в которой презентовался новый браузер. Разработчики Uzbl стараются придерживаться философии Unix - "Программа должна выполнять только одну задачу и должна делать это хорошо".

Видео-презентация Uzbl (англ.):

Коротко про Uzbl

Попытаюсь истолковать в двух-трех параграфах. Самые популярные и качественные веб-браузеры обладают огромным количеством возможностей, которые работают не всегда как надо и, более того, не всегда нужны пользователю. Большие возможности означают большой и сложный код, что в свою очередь означает медленную работу и большое количество багов. Проще говоря, ни Firefox, ни Opera, ни Chromium не укладываются в знаменитую идеологию Unix, к которой так симпатизируют некоторые пользователи. Конечно, кроме этих трех браузеров существуют и другие, но они тоже не пришлись по духу ребятам из Arch Linux по целому ряду причин. Короче говоря, все они - НЕ ТЕ :)

Uzbl с одной стороны, благодаря webkit, предоставляет пользователю качественную отрисовку страниц, поддержку всяческих CSS, JavaScript, Flash итд итп. С другой стороны: практически полное отсутствие графических "нашлепок", кнопочек, звездочек и прочих финтифлюшек; минимальный набор функционала, который можно (и нужно) расширять собственноручно - так, как вы захотите; крайне гибкую конфигурацию, позволяющую пользователю делать с браузером все, что душе угодно (как пример, - на событие загрузки файла можно "повесить" открытие новой вкладки, запуск скринсейвера и удаление файла "отчет.odt" из домашней директории пользователя).

Никто, однако, не утверждает, что Uzbl - идеальный браузер. Напротив - он совсем не идеален и подходит далеко не каждому. Многие пользователи удивляются, почему в Uzbl нет нормального менеджера закачек и истерически смеются, когда им предлагают его написать. Их можно понять - не каждый получает удовольствие от программирования. С другой стороны, у Uzbl есть еще один веский плюс - архив с исходным кодом Uzbl весит примерно 150кб, включая стандартные скрипты и документацию. А теперь вспомните, сколько весят исходники Firefox или Chromium и сравните. Да, помимо архива с Uzbl будет необходимо установить сам Webkit и еще несколько библиотек (которые у вас, скорее всего, уже установлены), но все-равно это чертовски маленький вес.

Установка Uzbl

Хотел написать стандартную фразу про то, что Uzbl можно установить через менеджер пакетов вашего дистрибутива, но потом понял, что это выглядело бы глупым :)

Но все-же: весь процесс установки сводится к получению исходников через git, правке Makefile (если надо) и выполнению команд make и make install. Если захотите удалить Uzbl из системы, всегда сможете выполнить make uninstall. После компиляции в каталоге появляется бинарник uzbl-core, весом 260К и три небольших скрипта - uzbl-browser, uzbl-event-manager, uzbl-tabbed. Запустить браузер можно командой uzbl-browser, а если хотите вариант с вкладками, то вам нужен uzbl-tabbed.

Использование Uzbl

Для начала, небольшой список дефолтных клавиатурных сочетаний:
h,j,k,l - vim-style прокрутка страницы: влево, вниз, вверх, вправо;
PageUp,PageDown - постраничная прокрутка вверх/вниз;
<<, >> - переместиться в верх страницы, переместиться в низ страницы;
w - открыть новое окно (в uzbl-tabbed будет открыта новая вкладка);
c - клонировать открытое окно;
go - открыть адрес в новой вкладке;
b - назад;
m - вперед;
S - остановить загрузку страницы;
r - перезагрузить страницу;
R - перезагрузить страницу без кэша;
+ - увеличить масштаб;
- - уменьшить масштаб;
t - скрыть/показать статус бар;
/ - поиск;
n - перейти к следующему результату поиска;
N - перейти к предыдущему результату поиска;
gg - искать в Google;
o - перейти по адресу;
O - редактировать текущий адрес;
i - перейти в режим вставки текста;
Esc - перейти в командный режим;
yu - скопировать адрес открытой страницы в буфер;
p - перейти по адресу из первичного буфера;
P - перейти по адресу из буфера clipboard;
'p - перейти по адресу из первичного буфера и загрузить страницу 
в новой вкладке;
Shift-Insert - вставить текст из буфера обмена на позицию курсора при
редактировании адреса;
Ctrl-b + тег - добавить страницу в закладки;
u - открыть список закладок;
U - открыть список истории;
fl - подсветить ссылки цифровыми или буквенными обозначениями;
Fl - то же самое, только при переходе по ссылке страница откроется 
в новой вкладке;
gn - открыть новую вкладку;
gC - закрыть вкладку;
gQ - закрыть все вкладки, но не закрывать окно Uzbl;
g< - перейти к первой вкладке;
g> - перейти к последней вкладке;
gt - перейти к следующей вкладке;
gT - перейти к предыдущей вкладке;
gi + номер вкладки - перейти к определенной вкладке;

Клавиши управления не совсем такие, как в Vimperator-е, поэтому если вы пересаживаетесь с последнего на Uzbl, то нужно будет какое-то время, чтобы привыкнуть. Если вы привыкли к "мышиному" управлению, то Uzbl покажется вам неудобным и чуждым. Но поверьте, это временно.

Режим вставки/ввода текста в Uzbl

При использовании Uzbl надо помнить, что режим вставки текста не является основным. Например, зайдя на http://ya.ru, вы не сможете сразу ввести текст в поле запроса, весь текст будет набираться в строке статуса. Переход в режим ввода текста (insert mode) осуществляется по нажатию клавиши 'i'. Переход обратно в командный режим осуществляется по нажатию 'Esc'. Если на странице только одно поле для ввода и оно уже в фокусе, то этого будет достаточно. В остальных случаях это выглядит так: жмете 'fl', набираете номер нужного поля для ввода, после чего оно становится активным, и жмете 'i' для перехода в insert mode. Если честно, меня немного напрягает необходимость каждый раз нажимать 'i'. Было бы лучше, если бы Uzbl переходил в insert mode сразу. Если найду способ, как это сделать, обязательно выложу сюда.

В Uzbl есть возможность быстрого перехода в insert mode: по нажатию 'fi' фокус переходит на ближайшее поле для ввода и активируется insert mode. За эту возможность отвечают скрипты "/usr/share/uzbl/examples/data/scripts/go_input.sh" и "/usr/share/uzbl/examples/data/scripts/go_input.js". В первом скрипте используется утилита socat. Если она у вас не установлена, то этот скрипт можно немного подредактировать и выглядеть он должен так:

#!/bin/sh
case "$( echo "script @scripts_dir/go_input.js" > "$UZBL_FIFO" )" in
    *XXXEMIT_FORM_ACTIVEXXX*)
            echo "event FORM_ACTIVE" > "$UZBL_FIFO"
            ;;
esac

Только лучше скопируйте заранее весь каталог /usr/share/uzbl/examples/data/scripts/ в ~/.local/share/uzbl/:

cp -rv /usr/share/uzbl/examples/data/scripts/ ~/.local/share/uzbl/

В ином случае, после переустановки/обновления Uzbl, все скрипты в каталоге /usr/share/uzbl/ перезапишутся и вы потеряете все изменения. Так, для вышеназванного скрипта новый путь должен быть в итоге таким: ~/.local/share/uzbl/scripts/util/go_input.sh

Кстати, у меня этот скрипт работает очень медленно - после нажатия 'fi' проходит до половины секунды, прежде чем браузер перейдет в режим вставки текста.

При вставке текста из буфера обмена в поля ввода по нажатию Ctrl-v или Shift-Insert текст вставляется из буфера Clipboard. Для того, чтобы вставить текст из Primary буфера, нужно задействовать колесико мыши.

И еще кое-что. По нажатию 'yu' в primary буфер будет скопирован адрес текущей страницы. Сейчас многие программы используют по умолчанию clipboard буфер и вставить текст из primary можно только кликом на колесике мыши. Так что по желанию в конфиге Uzbl можете заменить строку

@cbind  yu  = sh 'echo -n "$UZBL_URI" | xclip'
на
@cbind  yu  = sh 'echo -n "$UZBL_URI" | xclip -sel clip'
тогда адрес будет помещаться в clipboard и вставить его оттуда можно будет по Ctrl-v.

Закладки в Uzbl

Для закладок в Uzbl есть скрипт /usr/share/uzbl/examples/data/scripts/load_url_from_bookmarks.sh, который запускается по нажатию 'u'. После этого вы можете с помощью стрелок вверх-вниз выбрать нужную ссылку. Когда список закладок большой, очень удобно использовать теги. К примеру, прямо сейчас нажмите Ctrl-b, введите 'zenux uzbl' и нажмите Enter. Теперь вернуться на эту страницу с помощью закладок вы можете, нажав 'u' и введя один из тегов (не обязательно вводить теги целиком, может быть достаточно первых символов). Список закладок хранится в обычном текстовом файле: ~/.local/share/uzbl/bookmarks. Редактируя его, можно удалять ненужные закладки. Возможно, существуют и другие скрипты для закладок в Uzbl, но по мне этот скрипт почти идеален. За одним исключением - закладки нельзя открывать в новом окне (читай - в новой вкладке). Но мы это сейчас исправим.

Приведем скрипт load_url_from_bookmarks.sh к следующему виду (не забывайте, что редактировать лучше скрипт из каталога ~/.local/share/uzbl/scripts/, а не из /usr/share/uzbl/):

#!/bin/sh

#NOTE: it's the job of the script that inserts bookmarks to make sure there are no dupes.

DMENU_SCHEME=“bookmarks”
DMENU_OPTIONS=“xmms vertical resize”

. “$UZBL_UTIL_DIR/dmenu.sh”
. “$UZBL_UTIL_DIR/uzbl-dir.sh”

[ -r "$UZBL_BOOKMARKS_FILE" ] || exit 1

if [ -z "$DMENU_HAS_VERTICAL" ]; then
    # because they are all after each other, just show the url, not their
    # tags.
    goto=“$( awk ‘{ print $1 }’ ”$UZBL_BOOKMARKS_FILE“ | $DMENU )”
else
    # show tags as well
    goto=“$( $DMENU < ”$UZBL_BOOKMARKS_FILE“ | cut -d ‘ ’ -f 1 )”
fi

if [ "$1" == "new_window" ]; then
	[ -n "$goto" ] && echo “event REQ_NEW_WINDOW $goto” > “$UZBL_FIFO”
else
	[ -n "$goto" ] && echo “uri $goto” > “$UZBL_FIFO”
	#[ -n "$goto" ] && echo “uri $goto” | socat - “unix-connect:$UZBL_SOCKET”
fi

Т.е. если просто запускать скрипт, то страница по ссылке из закладок будет просто открываться в текущем окне, а если запускать его с параметром 'new_window', то ссылка будет открываться в новом окне. Учитывая, что мы используем uzbl-tabbed, то вместо нового окна будет открываться новая вкладка.

Осталось изменить конфиг Uzbl - ~/.config/uzbl/config и добавить в него такую строку:

@cbind  <Mod1>u = sh ‘~/.local/share/uzbl/scripts/load_url_from_bookmarks.sh new_window’<
Теперь если вы хотите открыть ссылку из закладок в новой вкладке, вы можете использовать сочетание Alt-u.

Вкладки в Uzbl

Кстати о вкладках. Сам uzbl-browser не умеет работать с вкладками. Для реализации этой возможности существует скрипт uzbl-tabbed, который фактически работает не с вкладками а с окнами uzbl. Т.е. при открытии новой вкладки происходит запуск отдельного uzbl-core. Именно поэтому если вы в одной вкладке ввели в поиск по странице слово "linux", то в другой вкладке для поиска по тексту страницы придется ввести слово заново. Или, например, при изменении useragent-а в одной вкладке, на остальных вкладках useragent останется прежний. Да, именно поэтому Uzbl жрет так много памяти при работе с большим количеством вкладок.

Кстати, если в вашем uzbl-tabbed вместо новых вкладок открываются новые окна, то в конфиге Uzbl закомментируйте две следующие строчки и раскомментируйте третью:

#@on_event   NEW_WINDOW     sh ‘uzbl-browser ${1:+-u “$1”}’ %r
#@on_event   REQ_NEW_WINDOW event NEW_WINDOW %s
@on_event   NEW_WINDOW     event NEW_TAB %s
Теперь вместо нового окна всегда будет открываться новая вкладка. Если вы захотите получить новое окно, просто запустите еще один uzbl-tabbed.

Прожорливость Uzbl

Кстати о памяти. Как я уже сказал, каждый раз, когда вы открываете новую вкладку в uzbl-tabbed, фактически запускается отдельный экземпляр uzbl-core. Но на деле все не так страшно. У вас может сложиться впечатление, что Uzbl хавает очень много памяти, но не забывайте про то, как в Linux осуществляется работа с динамическими библиотеками :) Открыв в 10 вкладках сайт Youtube.com, свободной памяти в моей системе стало меньше всего на 49МБ. Это больше, чем скушает Firefox, но согласитесь, что для современных компьютеров это совсем незначительный объем.

Насчет процессора ничего сказать не могу, но запускается Uzbl значительно быстрее Firefox или Chromium.

Загрузки в Uzbl. Как скачивать файлы в Uzbl. Uzbl downloads script

Умолчальный способ загрузки файлов в Uzbl ужасен. Мало того, что нельзя отметить загрузку, так у меня еще и не отображался прогресс в процентах (баг). Но все поправимо. Для Uzbl существует отличный скрипт lich-download.sh, который можно увидеть по этому адресу: http://www.uzbl.org/wiki/lich-download.sh . Для нормальной работы этот скрипт нужно немного подправить, поэтому я просто выложу сюда рабочий вариант скрипта lich-download.sh:

#!/bin/sh
DOWNLOADER=“wget –user-agent=Firefox –content-disposition –load-cookies=$XDG_DATA_HOME/uzbl/cookies.txt”
URL=“$1”
SAVE=“Save file”
CANCEL=“Cancel saving”
UP=“..”
#If you modify the above 3 variables, make sure you name them in such a manner that you will never have a folder with 
that same name
 
TARGET=“/media/Downloads”
FGCOLOR=“#B8DDEA”
BGCOLOR=“#222222”
SELCOLOR=“#B8DDEA”
DMENU_FONT=“-*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-*”
 
#could have “hardcoded” these or course but this is easier in case you want to modify something :)
 
while (true); do
DIRLIST=`ls -l $TARGET | grep ^d | awk ‘{print $9}’`
if dmenu –help 2>&1 | grep -q '\[-rs\] \[-ni\] \[-nl\] \[-xs\]'
then
    SELECTION=`echo -e -n “$SAVE\n$CANCEL\n$UP\n$DIRLIST” | dmenu -fn    $DMENU_FONT -nb “$BGCOLOR” -nf “$FGCOLOR” 
-sb “$SELCOLOR” -sf “$BGCOLOR” -p “$TARGET” -xs 
-rs -l 20`
else
    SELECTION=`echo -e -n “$SAVE\n$CANCEL\n$UP\n$DIRLIST” | dmenu -fn   $DMENU_FONT -nb “$BGCOLOR” -nf “$FGCOLOR” -sb 
“$SELCOLOR” -sf “$BGCOLOR” -p “$TARGET”`
fi
if [ "$SELECTION" = "$SAVE" ]; then 
    break
fi
if [ "$SELECTION" = "$CANCEL" ]; then 
        exit
fi
if [ -z "$SELECTION" ]; then 
        exit
fi
if [ "$SELECTION" = "$UP" ]; then 
        TARGET=$(dirname $TARGET)
else
    TARGET=“$TARGET/$SELECTION”
fi
done

cd “$TARGET”
xterm -bg “$BGCOLOR” -fg “$FGCOLOR” -title “Download” -e “echo \”Target: $TARGET/\" && $DOWNLOADER $URL && echo 
\"Download complete. Press any 
key to close\“ && read”

Переменную TARGET измените по своему усмотрению - в ней указывается дефолтный каталог, в который будут сохраняться скачанные файлы. Сохраните этот файл под именем ~/.local/share/uzbl/scripts/lich-download.sh , а в конфиге Uzbl строку

set download_handler    = sync_spawn @scripts_dir/download.sh
замените на
set download_handler = spawn @scripts_dir/lich-download.sh

Теперь при скачивании файла вверху экрана вы увидети панель dmenu, в которой можно выбрать каталог для загрузок или просто нажать 'Enter' для сохранения файла в дефолтном каталоге. После этого откроется окно терминала (в данном случае используется xterm, поэтому он должен быть установлен) и вы увидете, как wget начнет скачивать файл. Когда файл будет скачан, надо нажать любую клавишу, чтобы окно исчезло. Скрипт работает отлично, но иногда, к сожалению, файлы сохраняются под неправильными именами. Например, такое часто бывает при сохранении файла торрента с торрент-трекеров.

Быстрое создание коротких ссылок (tinyurl) в Uzbl

Все просто - добавляем в ~/.config/uzbl/config следующую строку:
@cbind xu = sh 'wget -O - "http://tinyurl.com/api-create.php?url=\@uri" | xclip'

Теперь по нажатию 'xu' адрес текущей страницы будет сокращаться через tinyurl.com и полученный URL будет помещаться в primary буффер. Если хотите, чтобы адрес помещался в clipboard, замените 'xclip' на ''.

Смена useragent в Uzbl

Эта возможность мне понадобилась для входа на Google Plus. Если с Uzbl просто зайти на Google Plus, то вы увидете сообщение о том, что "ваш браузер более не поддерживается" и ссылки для скачивания четырех популярных веб-браузеров. Зря Google так делает. Чтобы обмануть злой Google, мы можем представиться огненной лисой или кем-либо еще. Создайте файл /home/brainsburn/.local/share/uzbl/scripts/switch_useragent.sh и заполните его следующим содержанием:

#!/bin/sh

[ -d "${XDG_DATA_HOME:-$HOME/.local/share}/uzbl" ] || exit 1
file=${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/user_agents.txt

COLORS=“ -nb #303030 -nf khaki -sb #CCFFAA -sf #303030”
if dmenu –help 2>&1 | grep -q '\[-rs\] \[-ni\] \[-nl\] \[-xs\]'
then
	DMENU=“dmenu -i -xs -rs -l 10” # vertical patch
else
	DMENU=“dmenu -i -l 10” # horizontal, oh well!
fi

if [ -z "$8" ] ; then
	new_agent=`grep -v '^[[:space:]#]' $file | $DMENU $COLORS | perl -p -e ‘s/^.*?: ?//’`
else
	new_agent=`grep “^$8:” $file | perl -p -e ‘s/^.*?: ?//’`
	[ -z "$new_agent" ] && exit 1
fi
echo “set useragent = $new_agent” > “$UZBL_FIFO”
echo “reload” > “$UZBL_FIFO”

Не забудьте дать файлу права на исполнение :) chmod +x switch_useragent.sh. Теперь создайте файл ~/.local/share/uzbl/user_agents.txt и поместите в него список useragent-ов. Например, такой:

Uzbl (Webkit @{WEBKIT_MAJOR}.@{WEBKIT_MINOR}) (@(+uname -sm)@ [@ARCH_UZBL]) Gentoo
Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1
Теперь в конфиг Uzbl добавьте следующую строку:
@bind CU = spawn ~/.local/share/uzbl/scripts/switch_useragent.sh

После этих действий сменить useragent можно так: запускаете uzbl-tabbed, в одной из вкладок жмете 'CU' (Shift+c+u), в появившемся списке dmenu выбираете тот, что начинается на 'Mozilla' и жмете Enter. После этого заходите, например, на Google Plus и глупый Гугл думает, что вы - Firefox. Нужно помнить, что useragent меняется только для одной вкладки, в остальных он остается прежним.

Добавление пунктов в меню Uzbl

Очень просто:
menu_add ZenuX.ru = set uri = http://zenux.ru
или так:
menu_add Uzbl, скажи что-нибудь = sh "xterm -e 'echo Хватит разговаривать с браузером!; read'"

Куки (cookies) в Uzbl

Упомянул это только для избежания лишних вопросов. С кукисами Uzbl работать умеет - есть дефолтный скрипт, который сохраняет список кукисов в ~/.local/share//uzbl/session-cookies.txt.

Вставка текста из буфера при редактировании адреса

Не знаю, как у вас, но у меня не работала вставка текста из буфера при редактировании URL в Uzbl (которое происходит по нажатию 'Shift-o'). Оказалось, что в моем Uzbl не работало вот это:

@modkey_addition <Shift> <Insert>  <Shift-Insert>
Поэтому строку, отвечающую за вставку текста при редактировании URL, надо изменить с
@bind <Shift-Insert> = sh ‘echo “event INJECT_KEYCMD $(xclip -o | sed s/\\\@/%40/g)” > “$UZBL_FIFO”’
на
@bind <Shift><Insert> = sh ‘echo “event INJECT_KEYCMD $(xclip -o | sed s/\\\@/%40/g)” > “$UZBL_FIFO”’
Теперь все будет работать.

Да, чуть не забыл. Не помню, из какого буфера Uzbl вставляет текст по Shift-Insert, но я сделал так:
@bind <Shift><Insert> = sh ‘echo “event INJECT_KEYCMD $(xclip -o | sed s/\\\@/%40/g)” > “$UZBL_FIFO”’
@bind <Ctrl>v = sh ‘echo “event INJECT_KEYCMD $(xclip -o -sel clip | sed s/\\\@/%40/g)” > “$UZBL_FIFO”’

То есть по Shift-Insert в адресную строку будет вставляться текст из primary буфера, а по Ctrl-v - из clipboard буфера.

Быстрый поиск в Google в Uzbl

В готовом конфиге есть сочетание 'gg' для поиска в Google. Нажимаете эти клавиши, вводите там же поисковый запрос и поехали. Добавим немного функциональности - сделаем возможность открытия страницы поисковика в новой вкладке. Для этого добавьте в конфиг Uzbl такую строку:

@cbind  Gg<Google:>_         = event REQ_NEW_WINDOW http://www.google.com/search?q=\@<encodeURIComponent(%r) [google.com]>\@

Как вы уже поняли, вы жмете 'Gg', вводите поисковый запрос и страница со злым Гуглом открывается в новой вкладке. По аналогии можно добавить то же самое и для Яндекса.

Кириллица в dmenu

Вы могли заметить, что в списке закладок и истории русские буквы отображаются кракозябрами. Лечится это просто. Берем файл dmenu.sh по адресу ~/.local/share/uzbl/scripts/util/dmenu.sh (ведь мы скопировали каталог /usr/share/uzbl/examples/data/scripts к себе домой) и где-нибудь после строки " # Set the font if wanted " и перед строкой " if [ -n "$DMENU_FONT" ]; then " добавляем вот это:

DMENU_FONT="-*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-*"

Все. Для закладок и истории этого хватит. Скрипт lich-download.sh изначально тоже страдал этим недугом, но в том варианте, что я выложил выше, эта проблема уже устранена.

Блокировка рекламы в Uzbl. Adblock.

К сожалению, скрипт adblocker ( http://www.uzbl.org/wiki/adblock ) я не смог заставить работать. Поэтому единственный способ блокировки рекламы в Uzbl на данный момент - блокировка ее через прокси. Как-нибудь расскажу, как это делать. Если у вас получилось заставить работать скрипт adblocker или вы нашли другой рабочий скрипт, то прошу - отпишитесь об этом в комментариях.

Проблемы

Серьезная проблема у меня была одна: в Uzbl всегда и везде вводилась только латиница, даже если раскладка клавиатуры была переключена на русский. Устранилось это сборкой Uzbl без флага gtk3.

Заключение

Да, Uzbl - браузер не для всех. Так же, как dwm - оконный менеджер не для всех. Это не делает его ни лучше ни хуже. Это просто факт. Uzbl подойдет тем людям, которые любят настраивать все под себя своими руками. Возможности по настройке Uzbl очень большие - как я уже говорил в самом начале, на любое событие можно повесить практически любое действие, тут все зависит только от вашего воображения и базовых навыков скриптового программирования.

Я уверен, что забыл что-то упомянуть в статье, поэтому оставляйте вопросы в комментариях - будем разбираться вместе. Только прошу - не надо вопросов в духе "Зачем Uzbl нужен? Используйте нормальный браузер!". Статья будет по возможности дополняться новым материалом.






Возможно, эти материалы Вас заинтересуют:


Рекомендовать эту страницу:

Комментарии:(23)

# Karbolkin Sept. 14, 2011, 5:54 a.m.
Хорошая статья. А что лучше развивается в данный момент - он или luakit?

# Brainsburn Sept. 14, 2011, 12:29 p.m.
Честно говоря, не в курсе, что там с luakit

# Гость Oct. 11, 2011, 9:03 a.m.
>Я уверен, что забыл что-то упомянуть в статье, поэтому оставляйте вопросы в комментариях - будем разбираться вместе.

Ну что ж… Раз уж здесь приветствуются вопросы, тогда…
В общем, есть такой скрипт flashblock. Что он делает, понятно из названия.
Неудобство состоит в том, что снять блокировку с флешки можно только щелчком мыши, с клавиатуры у меня не получилось. Я практически не знаю JavaScript, поэтому сложно разобраться.
Вопрос: Как настроить управление флешем с клавиатуры? Возможно ли?

Скрипт здесь http://www.uzbl.org/wiki/flashblock [uzbl.org]

# Brainsburn Oct. 11, 2011, 12:11 p.m.
Чтобы снимать блокировку с помощью клавиатуры, нужно сделать некое подобие скрипта follow.js, но мне это не по силам, поэтому тоже приходится тыкать мышкой :( Надо разработчикам писать, короче говоря.

# Гость Oct. 17, 2011, 12:33 a.m.
Чтобы снимать блокировку с помощью клавиатуры, нужно сделать некое подобие скрипта follow.js, но мне это не по силам, поэтому тоже приходится тыкать мышкой :(
Возвращаюсь к вопросу. Я посмотрел скрипты flashblock и follow.
Зацепить флешку в follow - не проблема, проблемы начинаются дальше.
Как выяснилось, блокировка флешки вставляется вместо встроенного (embed) кода самой флешки.
И событие onclick отрабатывает не на самом блокировщике, а на родительском объекте.
В результате вместо разблокировки происходит переход по некоему прописанному в коде адресу.
В общем, надо переписывать flashblock.js. Текущая его реализация плохо поддается дрессировке.
Я пока ковыряюсь в нем, если получится что-то работающее - опубликую.

# xaizek Oct. 29, 2011, 10:36 p.m.
Вроде удалось заставить работать adblock.py:
1. сохранил в ~/.local/share/uzbl/scripts/adblock.py
2. дал права на исполнение
3. добавил в конфиг
@on_event LOAD_COMMIT spawn @scripts_dir/adblock.py
@on_event LOAD_PROGRESS js uzblAdBlock();
4. создал ~/.local/share/uzbl/adblock со следующими строками (для начала)
global:
//a[contains(@href,'ad.doubleclick')]
//iframe[contains(@src,'fastclick.net')]
//iframe[contains(@src,'ad')]
//iframe[contains(@src,'pink.habralab')]
//div[contains(@class,'banner')]
//img[contains(@src,'ad')]
//embed[contains(@src,'swf')]
//embed[contains(@src,'banner')]
//div[@id='navstrip')]
с таким списком должна блокироваться реклама на http://bash.org.ru [bash.org.ru] и http://habrahabr.ru, [habrahabr.ru] так что на них и проверяйте его на работоспособность.

Причина по которой скрипт у меня сначала не работал - на месте пустых строк был второй символ пробела (с кодом 160 или 0xa0) и питон его конечно не понимал. Так что пробуйте сначала запустить из оболочки.

# Brainsburn Oct. 30, 2011, 4:37 a.m.
xaizek, и правда, работает. Я добавил в список строку //div[@id='y5_direct1'] и не смотря на то, что в консоль валятся сообщения “At (command):1: ReferenceError: Can't find variable: uzblAdBlock”, на главной странице bash.org.ru рекламное сообщение исчезло. Только вот готовый список блокировок, полученный из списка фаерфоксовского adblock, похоже, не работает - при загрузке этой страницы Uzbl загрузил процессор на 100% на 5 минут, но когда страница все-таки прогрузилась, реклама Google была на месте.

# Brainsburn Oct. 30, 2011, 5:42 a.m.
Со списком adblock от firefox стало немного яснее, но все-равно, работает он как-то через раз. Возможно, это связано с долгим временем выполнения скрипта. Нагружает проц adblock в uzbl нещадно - в готовом списке блокировок +13000 строк, но даже с 2000 строками страница подвисает на значительное время. С этим надо что-то делать, а ставить блокировки только для частопосещаемых сайтов тоже не гуд. Кстати, изначально готовый список у меня не работал, опытным путем выяснилось, что это было вызвано наличием пустых строк.

# xaizek Oct. 30, 2011, 2:16 p.m.
То, что с пустыми строками не работало странно, судя по коду они должны обрабатываться нормально (может то тоже были непустые строки, а строки с одним символом второго пробела, какого чёрта он появляется при копировании неясно).

easylist я тоже пробовал, и из-за ужасных задержек отказался. Сам скрипт кстати вызывается во время загрузки (событие LOAD_PROGRESS) много раз, поэтому 13000+ строк надо ещё умножать на 20 (например, может и больше, зависит от содержимого страницы). Надо попробовать список в код прописать.

На сайте рекомендуют использовать adblock.js, т.к. с ним реклама даже не грузится до блокировки. Попробую в него вставить те 250КБ списка фильтров, интересно с какой скоростью он будет их обрабатывать.

# xaizek Oct. 30, 2011, 4:12 p.m.
Повозился с adblock.js и понял в чём его главный недостаток - т.к. он срабатывает при загрузке элемента, нету возможности вырезать статические элементы страницы (DIV, SCRIPT код которого добавляет рекламу, A, etc.).

easylist с XPath поместил прямо в скрипт (сразу в JavaScript) скорость улучшилась, но всё равно медленно (хотя это логично: тысячи путей, каждый из которых приводит к поиску в дереве, да ещё и много раз поиск повторяется). А рекламу всё также плохо блокирует.

# Артём Nov. 10, 2011, 1:36 p.m.
Спасибо за статью очень пригодилась и многое почерпнул!

Почему текст при выделении попадает сразу в два буфера? Как это исправть?

Проблема такая - скопировал что-то, выделил пробел случайно - и нету текста.
Приходится по <Ctrl>c его в мухосранск отправлять.. Потом по <Ctrl>v первым встречным поездом обратно. Как-то не хорошо.

Было бы логично, если б по выделению он попадал только в primory буфер, а по <Ctrl>c xclip`ом клался в clipboard, где бы и находился до необходимости, в целости и сохранности.

# Ringi Nov. 30, 2011, 12:37 a.m.
uzbl-event-manager: ERROR: event manager already started with pid 2593

вот такая ошибка выскакивает, если попробовать запустить вторую вкладку. страница не загружается/виснет и командная строка …её вообще нет.((

# Brainsburn Nov. 30, 2011, 7:29 p.m.
Ringi, у меня такая ошибка выскакивает каждый раз и, не смотря на нее, браузер работает. Если под командной строкой ты подразумеваешь статус-бар, то попробуй нажать ‘t’. Если все же страница виснет, то это проблема в чем-то другом, но не в той ошибке, которую ты привел.

# Dima Nov. 30, 2011, 11 p.m.
видео рабочего стола создал. там видно глюк или нет.

# Brainsburn Dec. 2, 2011, 2:51 a.m.
Dima, я ссылку потер, т.к. она вела на недобросовестный файло-хостинг, предлагающий вместо скачки файла отправить платную смс, а бесплатная скачка у них не работает.

# lwulf March 15, 2012, 3:12 a.m.
Спасибо за статью.
На удивление всё оказалось не так сложно и печально, как казалось при в первые секунды после установки. Дистриб slackware-x64 из карента(13.37+), ставил с сайта slacky.eu(в частности зависимости) и саму программу пересобирал.

для загрузки файлов можно использовать такой код
#!/bin/sh
GET=“wget”
URL=“$1”
FILENAME=$2
#$(echo $URL | awk -F'/' ‘{print $@}’)
DEST=$(zenity –file-selection –save –filename=“$FILENAME” –title=Save \file)
if [ -n "$DEST" ]
then
wget -O “$DEST” “$URL”
fi

конечно не идеально, но всётаки. Пример взят с англоязычного сайта, сам хотел делать на xdialog, только столкнулся с проблемой не вывода urxvt -e echo “чтото там” && read; разбираться с проблемой пока не стал

скрипт переключения “агента” - работать отказался, исправив кавычки - улучшения не было, нашел другой вариант и слегка подправил:

#!/bin/sh

[ -d "${XDG_DATA_HOME:-$HOME/.local/share}/uzbl" ] || exit 1
file=${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/user_agents.txt

COLORS=“ -nb #303030 -nf khaki -sb #CCFFAA -sf #303030”
if dmenu –help 2>&1 | grep -q '\[-rs\] \[-ni\] \[-nl\] \[-xs\]'
then
DMENU=“dmenu -i -xs -rs -l 10” # vertical patch
else
DMENU=“dmenu -i” # horizontal, oh well!
fi

if [ -z "$8" ] ; then
new_agent=`grep -v '^[[:space:]#]' $file | $DMENU $COLORS | perl -p -e ‘s/^.*?: ?//’`
else
new_agent=`grep “^$8:” $file | perl -p -e ‘s/^.*?: ?//’`
[ -z "$new_agent" ] && exit 1
fi
#echo “set useragent = $new_agent” > $4
#echo “reload” > $4 # Reload the page so the new user agent is used.
echo “set useragent = $new_agent” > “$UZBL_FIFO”
echo “reload” > “$UZBL_FIFO”

список агентов

# Original user agent. All lines beginning with a ‘#’ are ignored, as are blank lines.
# ———————-
# – Major Browsers –
# ———————-
Uzbl: Uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO) (@(uname -s)@ @(uname -n)@ @(uname -r)@ @(uname -v)@ @(uname -m)@ [@ARCH_UZBL]) (Commit @COMMIT)
Firefox (Windows): Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20100101 Firefox/11.0
Chrome: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19
Safari: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3
Internet Explorer 7: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)
Opera: Opera/10.00 (X11; Linux i686 ; U; en) Presto/2.2.0
Konqueror: Mozilla/5.0 (compatible; Konqueror/4.0; Linux) KHTML/4.0.5 (like Gecko)
Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1
Firefox (Windows): Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729)
# ———————-
# – Mobile –
# ———————-
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; en-us) AppleW

# lwulf March 15, 2012, 3:15 a.m.
Спасибо за статью.
На удивление всё оказалось не так сложно и печально, как казалось в первые секунды после установки.
Дистриб slackware-x64 из карента(13.37+)
Узы ставил с сайта slacky.eu(в частности зависимости) и саму программу пересобирал.

для загрузки файлов можно использовать такой код
#!/bin/sh
GET=\“wget\”
URL=\“$1\”
FILENAME=$2
#$(echo $URL | awk -F'/' ‘{print $@}’)
DEST=$(zenity –file-selection –save –filename=\“$FILENAME\” –title=Save \file)
if [ -n \"$DEST\" ]
then
wget -O \“$DEST\” \“$URL\”
fi

конечно не идеально, но всётаки. Пример взят с англоязычного сайта, сам хотел делать на xdialog, только столкнулся с проблемой не вывода urxvt -e echo \“чтото там\” && read; разбираться с проблемой пока не стал

скрипт переключения \“агента\” - работать отказался, исправив кавычки - улучшения не было, нашел другой вариант и слегка подправил:

#!/bin/sh

[ -d \"${XDG_DATA_HOME:-$HOME/.local/share}/uzbl\" ] || exit 1
file=${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/user_agents.txt

COLORS=\“ -nb #303030 -nf khaki -sb #CCFFAA -sf #303030\”
if dmenu –help 2>&1 | grep -q '\[-rs\] \[-ni\] \[-nl\] \[-xs\]'
then
DMENU=\“dmenu -i -xs -rs -l 10\” # vertical patch
else
DMENU=\“dmenu -i\” # horizontal, oh well!
fi

if [ -z \"$8\" ] ; then
new_agent=`grep -v '^[[:space:]#]' $file | $DMENU $COLORS | perl -p -e ‘s/^.*?: ?//’`
else
new_agent=`grep \“^$8:\” $file | perl -p -e ‘s/^.*?: ?//’`
[ -z \"$new_agent\" ] && exit 1
fi
#echo \“set useragent = $new_agent\” > $4
#echo \“reload\” > $4 # Reload the page so the new user agent is used.
echo \“set useragent = $new_agent\” > \“$UZBL_FIFO\”
echo \“reload\” > \“$UZBL_FIFO\”

список агентов

# Original user agent. All lines beginning with a ‘#’ are ignored, as are blank lines.
# ———————-
# – Major Browsers –
# ———————-
Uzbl: Uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO) (@(uname -s)@ @(uname -n)@ @(uname -r)@ @(uname -v)@ @(uname -m)@ [@ARCH_UZBL]) (Commit @COMMIT)
Firefox (Windows): Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20100101 Firefox/11.0
Chrome: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19
Safari: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3
Internet Explorer 7: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)
Opera: Opera/10.00 (X11; Linux i686 ; U; en) Presto/2.2.0
Konqueror: Mozilla/5.0 (compatible; Konqueror/4.0; Linux) KHTML/4.0.5 (like Gecko)
Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1
Firefox (Windows): Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729)
# ———————-
# – Mobile –
# ———————-
iPhone: Mozilla/5.0 (iPhone; U; CP

# Lwulf March 15, 2012, 3:17 a.m.
Прошу прощения за флуд, код нормально отображаться не желает, сорри (:

# lwulf March 18, 2012, 2:07 p.m.
Решение по adblock.
Помним, что uzbl должен быть именно браузером, средством открытия веб страниц - а не контентным фильтром. В таком случае задачу несколько меняется, а именно вот так:
(со стороны слаки)
1) устанавливаем privoxy
2) старутем /etc/rc.d/privoxy start
3) ищем\заменяем\добавлем в ~/.config/uzbl/config: set proxy_url = http://127.0.0.1:8118 [127.0.0.1]

# lwulf March 18, 2012, 3:06 p.m.
на всякий дополню:
Privoxy блокирует приличное кол-во рекламы, но он всеголишь проксик :) Зачастую его используют совместно с TOR.

в должно быть так 3) ищем\заменяем\добавлем в ~/.config/uzbl/config: set proxy_url = http://127.0.0.1:8118 [127.0.0.1]

Для блокировки ещё большего хлама можно поискать и поставить dansguard. Благо в нете полно статей по настройке, или же можно попробовать покапаться в манах и написать какойнибудь скрипт для преобразования адблок листов.


# Александр Feb. 22, 2013, 3:08 p.m.
Спасибо за статью! Освоил серфинг в uzbl - скорость супер!
Но есть вопрос- подскажите, пожалуйста, как настроить его через прокси (squid). При заходе на яндекс почту -“SSL handshake failed” Нагуглить чего-то толкового пока не получилось…

# andy Jan. 8, 2014, 1:11 a.m.
Тоже пишу с uzbl - понравился браузер. Работает пока отлично…Для нетбука самое то…
Стоит Fedora 20 на Aser Aspire 722.
За обозрение и подсказки спасибо. Всех с наступившими праздниками.

# Артем Dec. 13, 2016, 10:20 a.m.
Кстати, в этом году uzbl опять ожил и продолжил развитие. На момент написания этого комментария из их git`а: Latest commit 1de304b 7 days ago.

P.S. Некогда полюбил uzbl с подачи этой статьи.)

Комментировать:

Гость, Вы можете оставить свой комментарий.

Стиль кода:
Имя
Сайт * не обязательное поле
Поставьте галку, если вы - бот
Поставьте галку, если вы - человек

Друзья! Убедительная просьба воздержаться от нецензурной лексики!



Справка:
Если вы хотите использовать в тексте комментария специальные символы, например, [ и ], используйте их внутри тега [code] [/code]
Вы можете использовать теги BBcode. Для оформления кода и подсветки синтаксиса используйте тег [code] или [code=название_языка], например, [code=python]
Ссылки вставляйте так: [url]zenux.ru[/url] или так: http://zenux.ru, но не так: zenux.ru
Текст сообщения должен быть в пределах 3000 символов.




Последние комментарии:

fanyit: Спасибо за обзор. очень полезно и доступно.... >>>
cheech: Спасибо, статья полезная )... >>>
Васёк: Коммент, расскажи про часы на стене капитану в оке... >>>
METAJIJI: Ах да, почему я начал вообще трогать urxvt, потому... >>>
METAJIJI: Вкладки как раз не феншуйные (штатный tabbed), они... >>>