18 мар. 2009 г.

Shutter - функциональный "сниматель" скриншотов

Мне лично при снятии скринов приходится каждый раз выполнять довольно много однообразных действий. А снимаю я довольно часто по разным случаям. И вот недавно наткнулся на замечательную программу Shutter:



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

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


Заснять можно практически любой элемент десктопа. От отдельных окон и даже их фрагментов до веб-страниц и произвольных областей. Затем изображение при желании можно немного подредактировать в простеньком встроенном редакторе:


Готовые изображения можно прямо из программы залить на различные интернет-сервисы или на свой ftp:


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

Все изображения, представленные в этом очерке были сняты с помощью программы Shutter :)


Полный текст очерка

10 февр. 2009 г.

Rockbox

Поставил на днях свободную прошивку Rockbox на свой плеер Cowon iAudio 7:

^____^


Полный текст очерка

8 февр. 2009 г.

Xfce 4.6 RC1: стабильность, функциональность и удобство современного рабочего окружения

Не так давно вышел первый релиз-кандидат рабочего окружения Xfce 4.6. Смена мажорного номера версии (с 4.4 на 4.6.) принесла множественные улучшения, как в юзабилити для конечного пользователя, так и в возможностях для разработчиков. Xfce становится стабильнее, функциональнее и всё больше обретает признаки настоящего самобытного DE, оставляя позади старый штамп - "Gnome для бедных".

Xfce 4.6 RC1
C момента релиза версии 4.4 прошло уже около двух лет. С тех пор многое поменялось во внутренней архитектуре Xfce. Во-первых, на смену старой системы конфигурации MCS пришла новая, более модульная и функциональная Xfconf. Новая система более глобальна и в некоторой степени ее можно сравнить с проектом Gnome - gconf. На архитектурном уровне она представляет собой совокупность взаимодействий "каналов" (channels, группы настроек), "опций" (properties, составная часть каналов) и "значений" (values, значения опций). Всё это использует для сообщений между собой D-Bus.

В 4.6 появится утилита xfconf-query, которую многие пользователи (в основном разработчики) очень долго ждали. Данная консольная программа позволяет автоматизировать работу по настройке Xfce, манипулируя настройками на уровне команд. К примеру, вот так можно управлять настройками рабочего стола:

xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/image-path -s ~/path-to-wallpaper
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/image-show -s true
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/image-style -s 0

Первая команда устанавливает "обои" рабочего стола, вторая делает их видимыми, а третья указывает расположение. В синтаксис разобраться совсем несложно:
ключ -c указывает нужный канал (список всех каналов можно посмотреть командой xfconf-query -l);
ключ -p - опцию (полный список - xfconf-query -с channel -l);
и, наконец, ключ -s устанавливает значение опции.

На более высоком уровне из новинок нужно отметить, конечно же, xfce4-settings, который пришел на замену mcs-manager. Этот менеджер настроек содержит в себе набор графических утилит практически на все случаи первой необходимости. С его помощью парой кликов настраивается клавиатура, экран, горячие клавиши, композитинг и прочее.
xfce4-settings
Появился xfce4-settings-editor, аналог гномовского gconf-editor, позволяя получить доступ напрямую к настройкам среды.
Стоит отметить появление продвинутой функциональности для настройки управления средой - залипание клавиш, управление мышью с клавиатуры и широкие возможности уведомления пользователя о различных событиях, обратная связь (на основе системы AccessX).
accessability
Рабочий стол (xfdesktop) теперь тесно интегрирован с меню, которое стало быстрее. Исправления старых багов, новые возможности настройки фонового изображения и меню на рабочем столе - все это также будет в грядущем релизе и уже есть в RC1. Разработчиками заявлена поддержка модулем xfdesktop мониторинга и управления подключаемых устройств (hotplugging). То есть, если подключить второй монитор - xfdesktop должен определить его и начать использовать. К сожалению, эту интересную возможность я проверить не мог, в силу отсутствия под рукой второго монитора.
Новый звуковой миксер теперь поддерживает несколько звуковых подсистем и плат.

Также сразу бросается в глаза значительно изменившийся xfce4-appfinder, который был переписан с нуля.
xfce4-appfinder
А вот Thunar и оконный менеджер Xfwm не претерпели сильных изменений. Насчет последнего особенно жаль - xfwm далеко не образец функциональности и порой ужасно не хватает многих возможностей.

Подводя итог отмечу, что в работе Xfce стал намного приятнее и довольно удобнее. Изменений в скорости работы я почти не заметил, среда продолжает быть отзывчивой даже на слабой машине с включенным композитингом и выглядит вполне привлекательно. Многие баги ушли в прошлое, что меня в некоторых местах очень порадовало; другие остались на месте; вновь появившихся заметил всего пару несерьезных. В целом уже сейчас среда вполне готова к использованию и обживанию. Xfce становится все более стабильным, продвинутым и уникальным. Этот путь в свое время уже проделал Gnome, обогнав по стабильности KDE, теперь время Xfce показать себя с лучшей стороны и, быть может, открыть новые горизонты десктопного линукса.

Ссылки:.
1. Полный список изменений
2. Хороший обзор на Phoronix
3. Обзор на linux.com


Полный текст очерка

18 янв. 2009 г.

Об окнах и оконных менеджерах: тонкости организации и управления

Идея упорядочивания рабочего пространства в том или ином виде присуща всем графическим интерфейсам. Однако, окончательную настройку всегда делает сам пользователь и тут он ограничен несколькими факторами. Во-первых, своими пристрастиями. Кто-то любит, чтобы окна всех приложений располагались скопом на одном визуальном пространстве, кто-то предпочитает выделение каждому приложению конкретно своей зоны работы. Во-вторых, возможностями используемого графического окружения. В некоторых пользователь сразу получает все возможности тонкой настройки, в других приходится прибегать к сторонним средствам.

Предисловие.
По первому фактору лично я для себя выбрал второе - мне удобнее группировать окна по некому признаку и выделять группе окон свое рабочее пространство. Так легче ориентироваться, приходится меньше заниматься "увлекательной" операцией point-and-click, когда нужное окно сначала необходимо найти на панели/доке, а потом активировать мышью. Меня, как правило, сильно напрягает, когда на одном десктопе открыто больше 2-3 окон.

В случае использования таких оконных менеджеров, как fluxbox, dwm, awesome и т.п. в распоряжении пользователя сразу находится необходимый функционал. В общем случае достаточно прописать в файле настроек куда каким окнам рисоваться. Однако, при использовании xfwm, metacity и т.п. мы в выборе весьма ограничены. Да, есть виртуальные десктопы, но средств по управлению окнами предлагается крайне ограниченный набор. В xfwm, скажем, нельзя указать, чтобы окно браузера рисовалось на первом десктопе, без декораций, посередине и с указанными размерами. В таких случаях, пользователю очень сильно поможет программа devil's pie.

Немного об архитектуре WM.
Вывод окон приложений на экран осуществляется в общем случае с помощью двух технических средств - графического сервера (X Server) и оконного менеджера (Window Manager). Технически это представляет собой взаимодействие этих двух процессов. При запросе приложения показать окно верхнего уровня, х-сервер генерирует событие, которое перехватывается оконным менеджером, который в свою очередь создает так называемое frame window. Окно, содержащее в качестве своих составляющих такие компоненты, как главное окно приложения и декорации (название окна, кнопки управления). А также в некоторых случаях позволяет выполнить над окном ряд операций - манипуляции с прозрачностью, прорисовка на определенном десктопе, изменение размеров и т.п. Если менеджер окон не предоставляет функционала для расширенного управления окнами (xfwm, metacity), приходится прибегать к утилитам еще более высокого уровня. Так, devil's pie, представляет из себя демона, который взаимодействует с оконным менеджером - после того, как окно создалось, этот демон может выполнить с ним какие-либо заранее заданные действия. Таким образом, архитектурно это более излишне усложненное решение и лишний уровень абстракции. Однако, во многих случаях выбирать не приходится.
WM architecture

К практике!
Итак, в первую очередь программу нужно установить. Она довольно популярна и входит в состав репозиториев множества популярных дистрибутивов:

apt-get install devilspie
pacman -S devilspie

Для работы программа использует набор правил для ряда приложений, создаваемых пользователем. Правила должны располагаться в ~/.devilspie и представлять из себя простые текстовые файлы с расширением *.ds. Как пример приведу мое правило ~/.devilspie/Firefox.ds для браузера Firefox:
( if
( and
( is ( application_name ) "Firefox" )
)
( begin
( set_workspace 1 )
( println "match" )
)
)

Как можно легко понять, первые три строчки здесь представляют из себя условие, необходимое для срабатывания правила. В данном случае это появление окна с именем приложения "Firefox". Далее идет секция действий, которые следует предпринять с данным окном. В моем примере - переместить его на первый десктоп. Команда println "match" служит для отладочных целей настройки - она выводит в терминал с запущенным devil's pie "match", при срабатывании правила.
В качестве условий может выступать множество значений: window_class, window_role, window_name; также, как и в качестве действий: maximize, fullscreen, stick, center, geometry. Все эти значения можно посмотреть в руководстве man devilspie.
Приведу более сложный пример:
( if
( and
( is ( window_role ) "mainWindow" )
( contains ( window_class ) "Sonata" )
)
( begin
( wintype "utility" )
( set_workspace 5 )
( geometry "912x898+142+23" )
( println "match" )
)
)

Данное правило будет ждать появления окна с ролью "mainWindow" и класс которого содержит слово "Sonata". А затем присвоит окну тип "utility" (это позволит не становиться ему прозрачным, к примеру), перенесет на пятый десктоп и установит размеры и положение "912x898+142+23" (ширина, длина, позиция по оси X, позиция по оси Y).

Замечание: в xfce оконный менеджер по умолчанию перебрасывает окно, требующее фокус, на текущий десктоп. В частности, это приводит к тому, что не все ваши правила в devil's pie будут работать корректно и что при нажатии на ссылку, скажем, в почтовом клиенте на втором десктопе, браузер переброситься с первого десктопа на второй с почтовым агентом. Это не баг, а просто нет единого мнения у разработчиков по этому поводу. Однако, такое поведение можно отключить, добавив в файл ~/.config/xfce4/mcs_settings/wmtweaks.xml следующую строчку:
< option name="Xfwm/ActivateAction" type="string" value="none"/ >


Расширенный контроль сложных окон на примере GIMP.
Графический редактор GIMP сам по себе довольно нетривиально работает со своими окнами. Нельзя просто сказать всем окнам класса "Gimp" появляться на заданном десктопе - это не сработает. Однако, я провел небольшое изучение этого вопроса и просто приведу правила для Гимпа, а любой желающий сможет их прочесть и разобраться.
Итак, я создал три правила: два для стандартных боковых фреймов с инструментами и одно для, собственно, окна редактирования изображений.

Окно Toolbox с кистями, инструментами и т.п.:
( if
( and
( is ( window_role ) "gimp-toolbox" )
( contains ( window_class ) "Gimp" )
)
( begin
( undecorate )
( set_workspace 5 )
( geometry "136x925+0+25" )
( println "match" )
)
)

Окно со слоями и т.п.:
( if
( and
( is ( window_role ) "gimp-dock" )
( contains ( window_class ) "Gimp" )
)
( begin
( undecorate )
( set_workspace 5 )
( geometry "217x925+1062+25" )
( println "match" )
)
)

Окно редактирования изображений:
( if
( and
( is ( window_role ) "gimp-image-window" )
( contains ( window_class ) "Gimp" )
)
( begin
( wintype "utility" )
( set_workspace 5 )
( geometry "912x898+142+23" )
( println "match" )
)
)

Как видно из правил, все окна Гимпа перебрасываются на пятый десктоп и изменяют каждое свои размеры (меня очень раздражало, что Гимп автоматически позиционирует каждое окно с изображением). Окна-доки с инструментами и слоями также лишаются декораций (мне они ни к чему и только занимают место и визуальное пространство). А окно редактирования меняет тип на "utility", что не позволяет ему становится прозрачным (у меня включен композитинг и прозрачность активных/неактивных окон разная, т.о. вы можете себе представить в какое "удовольствие" превращается работа с изображением, когда приходится переключаться между окном редактирования и окнами инструментов).
Результат, как говориться, налицо:
GIMP with devil's pie
Дополнительные средства.
Не всегда удобно вручную возиться с правилами и помнить все десятки условий и возможных действий, которые поддерживает devil's pie. В этом случае я рекомендую воспользоваться утилитой gdevilspie - графический настройщик на pyGTK. Он позволяет очень просто парой кликов задавать правила и получать список параметров текущих окон.
По поводу определения параметров окон стоит сказать отдельно. Существует много средств для получения названий, классов, положения и ролей окон. Во-первых, это вывод самого devil's pie - достаточно запустить его из терминала, как мы увидим список присутствующих сейчас окон. Во-вторых, это программа xprop, которая позволяет указать нужное окно мышью и выведет большой массив данных. Отфильтровать их можно например так:
xprop | grep -i role

Что выведет только строку с ролью указанного мышью окна. В-третьих, программа wmctrl, которая вообще незаменима при работе с оконными менеджерами и окнами. Подробнее о ней можно узнать в руководстве man.

Заключение.
На этом, пожалуй, и закончу. Как видите, не все оконные менеджеры сразу предоставляют широкий функционал и, как правило, реагируют на одни и те же действия весьма по-разному. Однако, средства есть, хоть и сторонние. При всех недостатках метода контроля окон уровнем выше wm, это работает и весьма надежно. Так что ничто не мешает вам наслаждаться прелестями разграниченного рабочего пространства в таких окружениях, как Gnome, KDE и XFCE. Хотя для пользователей, которые хотят всё и сразу из коробки, я бы посоветовал взглянуть на Fluxbox, Openbox и другие. Как правило, при своих малых размерах, они уже прекрасно умеют всё то, что я здесь рассказывал без всяких дополнительных средств.

Ссылки:.
1. Window Managers for X: Introduction
2. Wikipedia: Re-parenting window manager
3. Devil's Pie: Syntax & Examples


Полный текст очерка

19 дек. 2008 г.

Нововведения Firefox 3.2pre

Я пользуюсь продукцией компании Mozilla вот уже несколько лет, практически с момента создания браузера с одноименным названием. Firefox, как передовой продукт, развивается очень активно. Третья версия принесла много нового, однако идеальных технических решений не существует. Есть еще целый ряд новшеств, которые предстоит реализовать. Попробовав сборки тестовых версий, некоторые из этих новшеств можно увидеть прямо сейчас.

В начале декабря 2008-го года вышли две тестовые версии Firefox - 3.1b2 и 3.2pre (бета 3.1 и пре-альфа 3.2). Скачать 3.2pre можно здесь. Пользователи arch linux могут установить ночную сборку 3.2pre из aur или следующей командой:

yaourt -S firefox-nightly

Во внешнем виде ничего особенно не поменялось:

Кроме кнопки на панели табов, позволяющей увидеть список открытых табов с предпросмотром:

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

Одним из самых интересных нововведений является, безусловно, private browsing. Этот режим, включающийся одним кликом мыши, позволяет осуществлять анонимный серфинг, не оставляя никаких следов в системе. На время его работы отключается кэш, cookies и т.п. Выключается данный режим так же просто и с восстановлением всех открытых табов.



Также заслуживает внимания новая система восстановления прошлой сессии после аварийного завершения работы браузера. В 3.0.4 в данном случае отображалось окно с предложением восстановления сессии, что было не совсем удобно - в случае, если браузер "упал" из-за ошибки в скрипте, то при восстановлении скрипт опять произвел бы нежелательные последствия. В итоге, чтобы не потерять важные открытые табы, приходилось проверять свою реакцию быстро закрывая таб с опасным скриптом до того, как он исполнится. В 3.2pre восстановление сессии реализовано элегантно и очень удобно:

Как видно на скрине, теперь можно выбрать, какие вкладки открывать, а какие - нет.

Значительно улучшено соответствие браузера стандартам:

(для справки, Firefox 3.0.4 выдает 71/100).

Новый движок обработки ява-скриптов TraceMonkey (наследник значительно переработанного SpiderMonkey) обещает увеличение скорости в 20-40 раз в некоторых случаях по сравнению с 3.0.4. SunSpider JavaScript Benchmark действительно показывает значительные улучшения в скорости работы:

(столбец FROM - 3.2pre, TO - 3.0.4).

Если у вас есть более детальные тесты по производительности JavaScript - я был бы рад на них посмотреть.

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


По разным источникам, Firefox 3.1 (в котором уже должны присутствовать все вышеперечисленные изменения) должен выйти в конце 2008, начале 2009 года. Чисто по ощущениям 3.2pre работает гораздо быстрее 3.0.4 и значительно приятнее в использовании в силу новых функций. Пользоваться каждый день тестовой пре-альфа версией, думаю, захочет не каждый, однако я для себя выбор сделал - на протяжении примерно недели не было замечено ни единого падения браузера в условиях обычного десктопного использования. Однако, иногда падал на некоторых тестах производительности (например, google V8 test suite).


Полный текст очерка

18 нояб. 2008 г.

В Synaptic появились скриншоты программ

В Debian Sid не так давно появилась новая версия (0.62.2) графического пакетного менеджера Synaptic с поддержкой просмотра скриншотов доступных программ.

При выборе пакета появляется кнопка "get screenshot":


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


Скриншоты хранятся на данном ресурсе и доступны всем желающим. Пополнение базы скриншотов производится силами сообщества. Любой желающий может залить свои и помочь собрать более полную коллекцию. Изображения помещаются в базу только после премодерации и должны соответствовать следующим требованиям:

  • Формат - png

  • Изображения больше 800x600 пикселей будут автоматически уменьшены

  • На скриншоте должен быть изображен процесс работы с программой. То есть, в видеоплеере должно играться видео, в браузере должен быть открыт сайт, а в игре должен быть показан процесс, а не стартовый экран

  • Интерфейс программ должен быть на английском языке для удобства всех пользователей. Запустить программу с английским интерфейсом можно, предварительно набрав export LANG=C

  • На изображении должна быть показана только конкретная программа, а не весь рабочий стол


За более подробными инструкциями можно обратиться сюда.

P.S. Как по мне, это - офигенная возможность. Вот только до ума довести.


Полный текст очерка

16 нояб. 2008 г.

Перенос системы на другой раздел

Когда возникает необходимость перенести рабочую систему на новый раздел или жесткий диск, многие, наверняка, выберут просто инсталляцию с нуля и копирование конфигов. Однако, такой подход не слишком практичен. Во-первых, это время. Нужно прожигать инсталляционный образ, тысячу раз перезагружаться и т.д. Да и образ не всегда бывает под рукой. Во-вторых, все-таки придется доустановить нужные пакеты и вообще привести систему в порядок. Гораздо быстрее и практичнее просто перенести уже рабочую систему на новое место со всеми пакетами/настройками и т.п. Это только звучит страшно, но на самом деле с помощью обычных gnu-утилит делается очень легко, быстро и просто.

1. Приготовления
Во-первых, советую весь процесс выполнять с Live CD, а не непосредственно с рабочей системы (хотя я делал и так без проблем). Это исключит вероятность несоответствия исходных и конечных данных.
Во-вторых, следует создать все нужные разделы для нового расположения системы.
И, в-третьих, примонтировать те разделы, информацию с которых предстоит переносить и те, на которые будет произведен перенос. Предположим, что исходный раздел - /media/old_root, а конечный - /media/new_root.

2. Процесс
В нижеследующих командах подразумевается, что у вас есть полный доступ к разделам или вы знаете, что такое sudo.
1)

cp -xpr /media/old_root /media/new_root
Тем самым мы просто скопируем исходный корень в конечный, со всеми атрибутами исходных файлов и директорий, а также будем держаться в пределах одной файловой системы (то есть, если у вас что-то примонтировано в /media/old_root/mnt/disk - оно не скопируется). Процесс длительный. Можно добавить в начало команды time, чтобы в конце узнать, сколько длилось копирование :)
2)
mount --bind /dev /media/new_root/dev
Монтируем текущий /dev в новый раздел, чтобы новая система "видела" установленные устройства. Это нужно для корректной установки загрузчика.
3)
chroot /media/new_root
Входим в окружение новой системы.
4)
mount -t proc proc /proc
Монтируем файловую систему /proc.
5)
mkswap /dev/new_swap
Говорим системе, где находится новый, предварительно созданный swap-раздел. Например, /dev/sda3.
6)
grub -> root(hd0,0) -> setup(hd0)
Этими командами мы установим загрузчик grub (директория которого находится в hd0,0) на новый диск hd0 (т.е., в MBR). Выполнять это следует только при переносе системы на новый HDD. При переносе просто на другой раздел текущего HDD старый загрузчик останется в рабочем состоянии и нужно будет только подправить его конфиг.
7)
nano /boot/grub/menu.lst
Подправим конфиг загрузчика - теперь он должен указывать на свежесозданные разделы. Если вы переносите систему только на другой раздел, то править нужно старый menu.lst - /media/old_root/boot/grub/menu.lst
8)
nano /etc/fstab
Также необходимо подправить конфиг монтируемых при загрузке устройств.

Всё готово. Советую не удалять сразу старый раздел, а предварительно убедиться в работоспособности нового.

3. Дополнения
1) Прописывать новые разделы в menu.lst и fstab лучше всего по UUID (Universally Unique Identifier) этих разделов. Это исключит вероятность того, что именование ваших разделов будет отличным от текущего и в любом случае ядро сможет правильно работать именно с нужными вам разделами. Узнать идентификаторы можно командой ls -l /dev/disk/by-uuid/.
В menu.lst формат будет таким:
kernel /vmlinuz26 root=/dev/disk/by-uuid/1ce08b86-b671-4013-beda-2d521ab187ec ro quiet vga=794 splash

А для fstab таким:
UUID=1ce08b86-b671-4013-beda-2d521ab187ec / ext3 defaults 0 1

2) В Arch Linux я столкнулся с проблемой при перезагрузке:
kinit: opening console: no such file or directory

В данном случае достаточно выполнить данную команду:
mknod -m 600 /dev/console c 5 1

Выполнять, естественно, надо в chroot. Или можно просто скопировать этот файл со старой системы (cp -a).
Также рекомендую пересоздать загрузочный образ:
mkinitcpio -p kernel26

из chroot.

4. Вот и всё
Перезагружаемся, проверяем всё ли работает.
???
PROFIT!

При написании данного очерка использовались материалы из данного топика на forum.ubuntu.ru А также 4 жестких диска и дистрибутивы Arch Linux "Overlord" и Debian Etch. Ни один из них в результате не пострадал.


Полный текст очерка