Gnome. Меняем меню скриптом

Евгений Чайкин aka StraNNik

2007-12-19

Недавний разговор с уважаемым Warderer'ом, большим любителем Ion'а и большим нелюбителем всех и всяческих DE, навёл меня на следующие мысли. Warderer в качестве примера удобства и автоматизации рабочего места, привёл следующие ситуации:

  1. Скриптом отключать и включать пункты меню в определённое время. Например, чтобы в рабочее время в меню отсутствовали браузер, IM и, к примеру, игрушки.
  2. С наступлением вечера изменять шрифты интерфейса в сторону увеличения, а с наступлением дня возвращать их оригинальные размеры.

Традиционно считается, что DE слабо поддаются автоматизации (а уж Gnome — и вовсе не поддаётся). Я решил развеять это предубеждение.

Приступим? Пункт второй я рассмотрю в отдельной заметке, а вот динамическое изменение меню, в силу крайней простоты этой процедуры, опишу сейчас.

Итак, согласно заветам freedesktop.org элементы меню хранятся в xml-файлах. Описания отдельных программ хранятся в т.н. desktop-файлах во вполне определённых каталогах.

После установки программы, описывающий её desktop-файл попадает в каталог /usr/share/applications/, из которого и формируется меню для всех пользователей. Персональные же настройки хранятся в каталоге ~/.local/share/applications/.

Несколько сумбурно и запутано, так? Ничего, сейчас будет пример и всё станет ясно.

Воспользуемся свежеприобретёнными знаниями и скроем из меню строку Firefox.

$ cp /usr/share/applications/firefox.desktop .local/share/applications/
$ echo "NoDisplay=true" > >.local/share/applications/firefox.desktop

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

Итак, мы скрыли пункт меню. Неплохо бы теперь вернуть его обратно. Сделать это можно двумя способами:

  1. Поменять NoDisplay=true на NoDisplay=false.
  2. Убрать нафиг правленый desktop-файл из локального каталога.

Вот так:

rm .local/share/applications/firefox.desktop

В силу того, что я ленивый — второй способ нравится мне куда больше.

Выводы:

  • править меню из консоли легко и просто.
  • сильно подозреваю, что этот способ работает и в XFCE. Возможно и в KDE.

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