Pull to refresh

Elementary OS. Наводим чистоту и порядок в Applications

Reading time7 min
Views96K
Здравствуйте!

Когда впервые зашла на хабр, поняла, что я дома. Home, Sweet Home.…
Всё не решалась написать. Вот, решилась! Пишу. Хорошо иль плохо, но пишу.



Меня всегда удручал беспорядок в [… всюду, не люблю беспорядок… ] в меню приложений Mandriva, Suse, Ubuntu, Elementary OS (Решила перечислить их в порядке использования. Пишу и ностальгирую). Конечно, ситуация одинакова для поголовного большинства дистрибутивов, так как информацию о том, как и где показывать программу прописывают сами создатели этих программ в *.desktop файлах. И многих из них похоже не волнует тот беспорядок, который происходит от такого халатного отношения к логике построения навигации.

Решила я это исправить. Давно давно давно, страшно давно. И через время, давно… Таки исправила. А вам решила и собралась показать только сейчас.

Задача: убрать из Applications всё лишнее. При этом не только не потерять в удобстве работы, но и многократно выиграть.

Разобралась как наипростейшим образом добиться того что мне нужно. А нужен мне порядок в меню и при этом работоспособность всех программ. Разные *.desktop файлы имели различную структуру и порядок строк. Одним словом — никакого порядка. Кто в лес, кто по дрова. Изменять их самой и доводить до совершенства задача неблагодарная. Да, я этим когда-то занималась, ещё была тогда на Ubuntu. Бросила ) Хотя наработки лежат до сих пор и наверное стоит их выложить как есть. Возможно получу поддержку пользователей в своём начинании, а может и раскритикуют меня в пух и прах так, что и забуду про эту свою давнешнюю идеаллистическую затею как страшный сон. Что поделать, надо пробовать.

Экспериментальным образом поняла что нужно добавлять две строчки в самое начало каждого *.desktop файла:
[Desktop Entry]
NoDisplay=true


Что за *.desktop файлы? — Что-то вроде ярлыков в Windows. Находятся в /usr/share/applications/

Я написала несложный bash файл. Визуально разбила его на три части:

  • То, что я запускаю из консоли. Не хочу что бы обыватели видели специфические приложения. И сами что бы не смущались и меня не смущали что б.
  • То, чему в меню программ делать по сути нечего. Архиваторы, проигрыватели, просмотрщики и прочие. Это обслуживающий персонал, работа которого должна быть изящна, быстра и ненавящива.
  • Текстовые редакторы. Вынесла отдельным блоком для удобства. Так же как и в предшевствующем пункте, на иконку редактора я нажимала быть может несколько раз, первых и из любопытства. Если нам всё таки нужен редактор под рукой то никто не запрещает закрепить его в док. В меню приложений его не будет, а в доке будет.


Вот так, например:



Заметка:
У меня нативный Scratch как редактор не прижился, но я не нашла ничего лучше Scratch для организации TODO lists и всяких notes. Была влюблена когда-то в Tomboy notes, консольный wyrd, затем в Wunderlist. Много чего перепробовала и остановилась сейчас на связке отзывчивого и простого тестового редактора c фиксацией дерева папок (Scratch) и облачного сервиса (Dropbox). Папки, что на снимке в левом сайдбаре, зафиксированы и никуда не деваются при открытии/закрытии редактора. Удобно. Такой функционал обнаружила случайно и полюбила его.

Код bash скрипта для наведения порядка в меню приложений
#!/bin/bash

# Just not needed for others to know that i have this in my system. 
# I always can run them from cli. Вот
sudo sed -i '1iNoDisplay=true'  /usr/share/applications/synaptic.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/synaptic.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/teamviewer-teamviewer9.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/teamviewer-teamviewer9.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/bleachbit.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/bleachbit.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/bleachbit-root.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/bleachbit-root.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/virtualbox.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/virtualbox.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/wireshark.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/wireshark.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/umit.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/umit.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/bum.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/bum.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/gparted.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/gparted.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/guake.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/guake.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/luakit.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/luakit.desktop


# Rubbish. То, что не запускаем отдельно, 
# а открывается автоматически при открытии соответствующего файла,
# основываясь на file associations 
sudo sed -i '1iNoDisplay=true'  /usr/share/applications/dropbox.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/dropbox.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/AdobeAIR.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/AdobeAIR.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/file-roller.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/file-roller.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/caffeine-preferences.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/caffeine-preferences.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/evince.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/evince.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/gdebi.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/gdebi.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/gthumb.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/gthumb.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/update-manager.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/update-manager.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/vlc.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/vlc.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/pantheon-terminal.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/pantheon-terminal.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/noise.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/noise.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/libreoffice4.3-base.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-base.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/libreoffice4.3-calc.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-calc.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/libreoffice4.3-math.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-math.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/libreoffice4.3-draw.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-draw.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/libreoffice4.3-impress.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-impress.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/libreoffice4.3-writer.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-writer.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/ibus-setup.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/ibus-setup.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/empathy.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/empathy.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/totem.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/totem.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/gxneur.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/gxneur.desktop

# Скрыла, потому что эти приложения доступны из контекстного меню. 
# Посчитала излишним дублировать их в меню. Время покажет права ли я.
sudo sed -i '1iNoDisplay=true'  /usr/share/applications/scratch-text-editor.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/scratch-text-editor.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/scribes.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/scribes.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/sublime_text.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/sublime_text.desktop

sudo sed -i '1iNoDisplay=true'  /usr/share/applications/atom.desktop
sudo sed -i '1i[Desktop Entry]' /usr/share/applications/atom.desktop


#Пример как удалить ошибочную строку после batch edit. Экранируем спецсимволы и ставим параметр 'd'
#sudo sed -i '/\[Desktop Entry\] NoDisplay=true/d' /usr/share/applications/synaptic.desktop



Из всех иконок либреофиса оставила лишь одну — центральную.

Сохраняйте и запускайте.

chmod u+x Beautify_menu
sh Beautify_menu

Одно лишь неудобство. Скрипт необходимо перезапускать после обновлений программ. Так как они стирают старый и записывают новый *.desktop файл. Как следствие, наши правки теряются и нужно повторить скрипт. А как быть когда одна программа обновилась, а другие нет. Что тогда? Не переживайте, многократные строки ниже ни на что не влияют:

[Desktop Entry]
NoDisplay=true
[Desktop Entry]
NoDisplay=true
[Desktop Entry]
NoDisplay=true
[Desktop Entry]
NoDisplay=true


Потому скрипт можно запускать бесконечное множество раз.

На сколько оптимально написан скрипт, оставляю на ваше суждение. Мне лично кажется, что код можно упростить как минимум вдвое. Но как именно, я не знаю. Замучалась экпериментировать и выложила как есть.

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

Если вы солидарны с моей точкой зрения про порядок в меню, не забудьте поправить скрипт «под себя». Желаю всем удачи.

В будущей статье хотела бы познакомить вас со своей консолью и её алиасами. Много еще чего чего лежит в папочке с пометкой «In dev». Мысли мои непоследовательны, знаю.

Tags:
Hubs:
+69
Comments120

Articles

Change theme settings