пятница, 21 августа 2009 г.

Включение и отключение flashplayer в Conkeror и не только

Проблема

Есть в природе flash-анимация, которая проигрывается flash-плейером. Иногда даже она может быть полезной, например, если очень хочется глянуть в интернете на http://youtube.com какой-нибудь ролик. Но вот когда она мелькает перед глазами, демонстрируя бездарную рекламу, появляется желание от неё избавиться, не только из-за навязчивости но и из-за прожорливости флеша в смысле процессорных ресурсов.

Поэтому хочется иметь по умолчанию флеш в отключенном состоянии, а включать только при необходимости. В популярных браузерах есть возможность включать и отключать это зло кликами мыши. К сожалению, в менее популярном браузере Conkeror такой опции пока нет (по крайней мере для версии Debian-0.9~git090223-1), а очень хотелось бы. Здесь я напишу каким образом я решил поставленную задачу. Решение не самое идеальное, поэтому при наличии интересных мыслей по этому поводу, добро пожаловать в комментарии!

Дано

На борту Debian Lenny (stable, на момент написания заметки),

$ uname -r
2.6.26-2-686

Flash поставлен проприетарный, flashplugin-nonfree, (другой на моей технике просто не шевелится) по официальной инструкции.

Предлагаемый подход и реализация

Поскольку для работы плейера пользователю необходимо иметь права для чтения библиотеки libflashplayer.so, запрет на чтение приведёт к тому, что неугодная анимация работать не будет. Файл libflashplayer.so лежит в моём случае в директории /usr/lib/flashplugin-nonfree:

$ ls /usr/lib/flashplugin-nonfree
итого 9916
-rw-r--r-- 1 root root 10131640 Фев  3  2009 libflashplayer.so
-rw-r--r-- 1 root root     2933 Июл 27  2007 pubkey.asc

Как видно, владелец - root, а группа и все остальные имеют право на чтение. Этого-то права мы и собираемся лишить, но не здесь, и чуть позже. Для начала скопируем файл libflashplayer.so в директорию ~/.mozilla/plugins

$ cp /usr/lib/flashplugin-nonfree/libflashplayer.so ~/.mozilla/plugins

Почему туда? Именно там Conkeror ишет плагины в первую очередь. На вики-странице говорится о том, что кроме того плагины могут лежать в ~/.conkeror/plugins, но у меня, почему-то это не работает.

Теперь лишим нас всех прав для чтения этого файла:

$ chmod a-r ~/.mozilla/plugins/libflashplayer.so

В результате, после перезагрузки страницы, содержащей флэш, мы насладимся его отсутствием. Вернуть его обратно можно, дав права на чтение:

$ chmod a+r ~/.mozilla/plugins/libflashplayer.so

Поскольку, для такой процедуры не очень здорово всегда писать в терминале подобную команду, имеет смысл забиндить эти действия на какие-нибудь комбинации клавиш. Я, например, для этого пользуюсь xbindkeys, и добавил в ~/.xbindkeysrc следующие строки (но можно использовать способы заданий комбинация клавиш для вашего оконного менеджера или для другой программы "забиндивания"):

"chmod a-r ~/.mozilla/plugins/libflashplayer.so"
Mod4 + bracketright
"chmod a+r ~/.mozilla/plugins/libflashplayer.so"
Mod4 + bracketleft
Таким образом, при нажатии Win + [ флэш включается, а при Win+] прибивается (не забываем предварительно перезапустить xbindkeys).

В принципе, всё работает, казалось бы, добились того, чего хотели. Всё бы ничего, но вот если вы залезете на тот же http://youtube.com, включив флэш, то выключение таким образом уже не отобразится на поведение флэша на других страницах, потому что программа flashplayer уже запущена и работает, а все изменения на неё не влияют. Чтобы изменения вступили в силу, надо просто закрыть страничку youtube. Хотя это и не всегда у меня наблюдалось.

Если честно, эту особенность обнаружил только когда писал пост и перепроверял всё на собственной шкуре. На других сайтах как-то не замечал такого - обычно после перезапуска страницы перезапускался и флэш. Стало быть, изменив права доступа, после перезапуска страницы я добивался того, чего хотел.

Резюме

Итак, пока для Conkeror пока не прикрутили переключалку флеша, я сгородил свою :) Разумеется, она должна работать не только для Conkeror, но и, судя по всему, для Firefox (полагаю, что тогда надо запретить пользователям читать общий файл /usr/lib/flashplugin-nonfree/libflashplayer.so, для чего нужны права рута, что для машины с одним пользователем приемлемо), хотя в этом и нет особой нужды, потому что там есть свои резалки флэша.

Поскольку решение неидеальное, был бы очень рад услышать пожелания/предложения.

Копируете статью - поставьте ссылку на оригинал!

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

Отправить комментарий