Pull to refresh

Comments 120

Стоп, всё не совсем так как вы говорите. я проверила:
sudo apt-get install alacarte

и вот:

sudo apt-get install --no-install-recommends alacarte

Gnome в зависимостях бог знает зачем, alacarte спокойно работает с elementary os без Gnome.
Забавная статья)) Тоже когда-то сидел на элементари, и тоже раздражало большое количество ненужных приложений при открытии основного меню слева наверху.

Сейчас перешёл на KDE, а там понаделал себе кучу рабочих столов под разные нужды, и разместил на каждом свои ярлыки с приложениями, признанные решать ту или иную задачу. Получилось очень удобно, уходить и что-то менять пока не собираюсь)
Похоже, что с вами никто не согласен, но мне приятна поддержка, спасибо! Вне зависимости от реальной действительности.
Ну не знаю. Мне понравился стиль изложения, хорошая структура и оформление. Тема статьи мне не слишком близка, поэтому содержание оценивать не буду. А форма, на мой взгляд — на 5 из 5.
Вот и я так подумал. Хотя надо бы обтесать :)

Инвайт потрачен не зря.
Уж если суждено мне троллем прослыть, пусть. Мне уже всё равно.
Что-то я не пойму этого всего. Ну написали один раз плохую статью — уберите её в черновик, позднее может более хорошую напишете.

Все ошибаются, не ошибаются только те, кто вообще ничего не делает.
Спасибо. Я в замешательстве и очень устала.
Или сделать как вы говорите или оставить до утра на растерзание критиков…
Если оставлю до утра, то точно буду знать стоит ли мне вообще публиковаться. Возможно так будет даже лучше. Ведь иначе я буду мнить о себе, что «отлично влилась в коллектив» (комментарий evnuh), а это похоже не совсем так…
Да не парься сильно насчёт всяких колких постов, у нас же люди часто друг другу грубят и унижают, это из-за болезней в их сердцах.

Скрипт точно можно улучшить) но вообще да, тебе надо просто побольше опыта набраться, поработать полгода-год, и уже потом начать писать хорошие и интересные статьи.
на счет всего этого не стоит переживать, главное, что в нашем полку прибывают новые люди, которых можно научить и они чему то научат.
обыкновенный мужской шовинизм.
Главное не останавливаться на достигнутом.
Ну а чего вы ждали от человека с таким ником? :)
Говорят, если ваша работа никого не раздражает, значит вы что-то делаете не так )

Слог и оформление я нахожу достаточно оригинальными.
Лично мне импонирует очередной пример того, как можно не привыкать к существующим условиям, а изменять их под себя. Причём, в нетипичной, на мой взгляд, для автора области.
Определённо здесь есть люди, которые нашли в статье что-то новое и интересное для себя. Тем более, некоторые комментарии развили тему и обогатили её.
Рекомендую автору усвоить всё полезное из данной ситуации и продолжать делиться опытом.
Отличный пример того, когда девушка в мужском коллективе уверена, что отлично влилась и понимает всех вокруг, но всё совсем наоборот.
UFO just landed and posted this here
Но ведь само начинание то похвально, «не девушки» тоже когда то начинали.

Мысли мои непоследовательны, знаю.

Все в порядке, это ведь часть того что делает вас девушками :)
UFO just landed and posted this here
Или новости про очередную BolgenOS от очередного Попова.
Мудацкий сексистский комментарий в плюсах. Аудитория Хабра в своём репертуаре.
Спасибо! Это правильный подход. Потому что сейчас для такой ерунды принято создавать новый дистрибутив.
UFO just landed and posted this here
Для этого я выложила всё как есть. Дальше не знаю.
Для того, что бы знающие люди могли усовершенствовать начатое.
UFO just landed and posted this here
Зачем echo перед sudo?
Вообще, лучше сам скрипт запускать через sudo, а не вызывать sudo внутри.
Достаточно одного вызова sed с параметром '1i[Desktop Entry]\nNoDisplay=true'.

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

Я не пользовался никогда упомянутыми дистрибутивами, так что не уверен, как в них это лучше сделать, но было бы неплохо обеспечить автозапуск этого скрипта после установки любых пакетов (может просто обёртку на apt-get положить в /usr/local/sbin/?).

Кроме того, у меня есть подозрение, что эту задачу можно как-то решить настройками внутри домашнего каталога пользователя, не меняя общесистемные файлы в /usr/ — возможно стоит положить модифицированные .desktop-файлы в ~/Desktop/.
UFO just landed and posted this here
Я бы ещё добавил проверку на существование файла перед запуском sed. Не люблю левые сообщения об ошибках.

#!/bin/bash

APPS="synaptic teamviewer-teamviewer9 bleachbit bleachbit-root virtualbox wireshark"

for APP in $APPS; do
    FILE=/usr/share/applications/${APP}.desktop
    if [[ -f ${FILE} ]] ; then
        sed -i '1iNoDisplay=true'  ${FILE}
        sed -i '1i[Desktop Entry]' ${FILE}
    fi
done


И, более того, зачем вызывать sed дважды? :) Все действия легко сворачиваются в однострочник:

#!/bin/bash

APPS="synaptic teamviewer-teamviewer9 bleachbit bleachbit-root virtualbox wireshark"

for APP in $APPS; do
    FILE=/usr/share/applications/${APP}.desktop
    [[ -f ${FILE} ]] && sed -i -e '1i[Desktop Entry]' -e '1iNoDisplay=true' ${FILE}
done


Тонкий момент: команды у sed надо поменять местами, если мы хотим, чтобы [Desktop entry] был в самом начале. Видимо, sed обрабатывает команды, начиная с последней. По крайней мере, у меня он работает так.
UFO just landed and posted this here
UFO just landed and posted this here
>Это стандартная фишка Gnome

Но ведь на локскрине же а не рабочем столе. Тем более элементари не гном, там нет гном шела, gala вместо mutter и рабочим столом не nautilus занимается.
Вы наверное не в курсе, как всё устроено. Nautilus не занимается рабочим столом. С таким же успехом вы можете впиндюрить в гном dolphin, и ничего не изменится, кроме файлового менеджера. divide et impera

Неужели ЧАСЫ — настолько важная информация, чтобы держать их по центру экрана в панели задач?

ntfs1984 если вы про большие часы на фоновом рисунке, то это что-то вроде плазмоида, мешать не должно. А если всё-же про часы на панели, то это не панель задач. На ней отображается лишь активное приложение. Так что часы никогда не помешают.
>Nautilus не занимается рабочим столом
Правильнее сказать наутилус по умолчанию больше не занимается рабочим столом в гном 3, если это не session-fallback и пользователь не включил иконки сам.
Я их случайно оставила на скриншоте, когда экспериментировала с верхней панелькой. Обычно у меня их нет. Только conky.

  • Я работаю в полноэкранном режиме и крохотные часики в некой панели мне не нужны, ведь я их всё равно не вижу.
  • Намного больше нравится смотреть на большие красивые часы с приятным фоном. Это моё очень личное мнение
  • Мне совсем не сложно переключится на свободный рабочий стол узнать время. И даже приятно.
UFO just landed and posted this here
без обид, но синдром %^$&# в поле from
lurkmore.to/%D0%A1%D0%B8%D0%BD%D0%B4%D1%80%D0%BE%D0%BC_%D0%BF%D0%B8%D0%B7%D0%B4%D1%8B_%D0%B2_%D0%BF%D0%BE%D0%BB%D0%B5_%C2%ABfrom%C2%BB

Просто поменьше розового и побольше оформления. Например, можно было бы выложить ваше «изобретение» на github, создать gist.
И, пожалуйста, применяйте уменьшительно-ласкательные суффиксы только к месту, а не везде.
UFO just landed and posted this here
Вы случаем не в роскомнадзоре работаете? Я написал, что по моему мнению не хватает посту.
UFO just landed and posted this here
UFO just landed and posted this here
Данное явление безусловно существует в нашей жизни, но ИМХО здесь, в отличие от лурка, не место для его упоминания.
UFO just landed and posted this here
В комментариях к бете писали, что проект умер.
UFO just landed and posted this here
Парни, вы зажираетесь!
Девушка сама установила linux (судя по статье уже не один дистрибутив), сама настроила систему, сама нашла нужные файлы… Много вы знаете таких? :)
Моя жена, например. Смогла поставить Arch Linux без моей помощи.
И… «например» уже закончился?)
Нет, серьёзно, девушек-linux-пользователей довольно мало. И каждую нужно ценить, я считаю, не меньше чем пользователей мужского пола.
А девушка не струсила, написало (при этом красиво пишет, да) статью и не побоялась выложить на суд и в поле зрения здешней общественности. Или я в чём-то не прав?

PS Всем прямых /dev/hands и светлой /dev/head
linux-пользователей в принципе немного. Тем не менее, я не понимаю, почему это воспринимается как нечто исключительное. Установить и использовать линукс заметно проще, чем винду, и если есть такой выбор у девушки (юноши/старика/ребёнка), то он весьма естественен.
UFO just landed and posted this here
Ну, на самом деле у Windows и, например, Убунты тут паритет. Разве что Убунту не надо активировать и вводить и вводить код лицензии. Драйвера какие-то и там, и там могут сразу после установки не подгрузиться, но, обычно проблем не возникает (Берём последние версии ОС и дистрибутивов).
Другое дело — большинство не знают другого мира кроме Microsoft (Случайно полученные обрывочные сведения без личного опыта знанием, в данном случае, я не считаю).
UFO just landed and posted this here
Я не знаю, что у вас за обычные пользователи, но вокруг меня народ (в том числе и дамы, в том числе моя дочь-тинейджер) ставят и используют линукс без серьёзных проболем. Да, линукс это не только убунту, но ведь и виндовс тоже может оказаться Windows 3.11, например.

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

Обычного пользователю, если у него нет привычки к чему-либо, проще то, что проще, и честное слово, линукс тут выигрывает (ну если не считать провала с Юнити на убунте, да и то не б-г весть как трудно).
Да я понял. Но я не считаю что установить что-то из вышеприведённого проще) Оно и не должно быть слишком просто. Тогда смысл теряется — получаем установленную систему с дефолтными параметрами и вшитыми сервисами, все равно кому-то, возможно, тогда придётся копаться в уже установленной системе в попытках «исправить» то что удобнее было бы сделать расстановкой галочек во время установки. Это всегда палка о двух концах.
По моему и Ubuntu так же устанавливается «Далее», «Далее»…
UFO just landed and posted this here
Извините, но дальнейшие пляски с драйверами идентичны, только Ubuntu для всего основного (т.е. наиболее распространенного) железа всё ставит само из удобного окошечка.

Вопрос специфичного железа лучше не поднимать, потому что на Windows с этим железом обычно тоже есть проблемы.

Это я говорю на опыте работы с процессорами VIA и старыми AMD, на каждой операционке свои проблемы, единственное в чём Вы правы — драйверов от производителей больше для Windows, хотя это не значит что в них нет проблем.
UFO just landed and posted this here
проблемы с Linux в львиной доле случаев начинаются:
1. После обновления системы из репозитория, если вы полгода не обновлялись.
2. Вы начинаете ставить без разбора пакеты, которые якобы требует модуль для компиляции. Особенно если хотите поставить игрушку.

В львиной доле случаев всегда можно восстановить систему из терминала, даже если GUI не грузится.
UFO just landed and posted this here
Так это же прекрасно? прививает дисциплину, а иначе бьет человека по голове гаечным ключом. Опыт — учитель дорогой, но объясняет доходчиво.
UFO just landed and posted this here
Я Вам отвечу проще — тем, кто не хочет разбираться в устройстве ПК, без разницы на Windows ли, или на Ubuntu звать знакомого админа ставить что-либо.

Не забывайте, что обычный пользователь просто научен чему-то, и банально потому что он уже знает Windows ему её и легче ставить.

Проведите эксперимент — представьте, что Вы не знаете как устанавливать Ubuntu / Windows, и у Вас на руках только лишь диск с дистрибутивом. Вам что там что там читать инструкции, что там, только установка программ Windows намнооого менее тривиальна…

Сравнение с другими дистрибутивами считаю не совсем корректным, надо сравнивать только с теми, которые заточены на десктоп — у каждого дистрибутива свои цели, естественно что минимальную установку Gentoo обычный пользователь сам проводить не будет, да и не надо оно ему=)

Лично у меня пожилые родственники уже более полугода сидят на мной поставленном Debian wheezy и ни разу (!!!) не задали вопросов как что, я просто с самого начала их полчаса обучил. Весь вопрос в знаниях.
UFO just landed and posted this here
Жене респект, но много ли таких…
Эм… рекомендую попробовать MacOS X…

А вообще спасибо. То немногое время, что сидел под Linux, я все время удивлялся тому, как неудобно настраивать рабочий стол.
От дистрибутива зависит. И от ваших критериев удобства)
UFO just landed and posted this here
На самом деле, в исчерпывающем большинстве случаев из железа можно обойтись только эппловской клавиатурой, magic trackpad, и bluetooth-донглом к этому всему, если нативного bluetooth нет на материнке. Это порядка 200$ за всё, если брать официальное, или на 30% дешевле, если брать у китайцев. Ощущения от работы с системой при этом не отличаются от таковых при работе с Mac Mini.

С точки зрения софта нужна безграничная любовь к изучению спецификаций ACPI, конечно, чтобы написать свою таблицу DSDT.
Нет, не лишнее.

Без трекпада нет возможности пользоваться жестами, которые используются вообще везде — два пальца для прокрутки окон во всех направлениях и вызова центра уведомлений, зума, вращения, контекстных меню, трехпальцевое смахивание вниз для Exposé (список окон и документов активного приложения) и вверх для Mission Control (список пространств и приложений), трехпальцевое смахивание вбок для переключения между пространствами, трехпальцевые тапы для контекстных действий, четырехпальцевые комбинации для показа рабочего стола и launchpad, и так далее, и тому подобное. Эти комбинации удобно использовать именно так, как они есть — мышью выполнить их невозможно, а на клавиатуру маппить неудобно.

Покупка эппловской клавиатуры более опциональна, если есть возможность найти PC-клавиатуру с кнопкой Fn. Я когда-то мокрыми руками после душа потрогал клавиатуру своего ноутбука, пара капель воды попали внутрь и с тех пор у меня кнопка Fn не работает. Я не подозревал, насколько я часто ей пользуюсь, сам того не замечая, и теперь постоянно испытываю дичайшее неудобство от её нехватки. Fn-кнопка используется в том числе для регулировки яркости экрана, подсветки, громкости, навигации по плейлисту (которой я, правда, никогда не пользовался), навигации в пределах строки в терминале и т.д.

У PC-клавиатур иначе расположены модификаторы — Ctrl, Meta, Alt вместо Ctrl, Opt и Cmd. В принципе, с этим можно бороться при помощи Karabiner (бывший KeyRemap4Macbook), потому что иначе конформистский путь «использовать, как есть» искажает всю суть. К примеру — операция копирования в буфер обмена выполняется Cmd+C. Эти две кнопки находятся очень близко, и нажимаются сведенными указательным и большим пальцем без какого-то напряжения. На PC-клавиатуре пришлось бы нажать или Ctrl+C, для которого большой палец нужно заводить далеко назад к ладони, или Win+C, что всё еще не так удобно. Разница чувствуется, когда через удаленный рабочий стол заходишь на Windows-компьютеры. Еще примеры подобных сочетаний — переключение раскладки через Cmd+Space или вызов настроек через Cmd+,.

Единственный ощутимый минус Apple-клавиатур — отсутствие кнопки Insert, которая бывает нужна при удаленной работе с Windows-системами, и с этим ничего не поделать, кроме как назначать через тот же Karabiner её эмуляцию на комбинацию вида Fn+Return или Fn+I.
ощутимый минус Apple-клавиатур

Русская раскладка. Не знаю, как на других, а у меня Wired Keyboard с цифровым блоком, и писать на ней по-русски — сущий ад. Например, точка/запятая ставятся через Shift… ну что это такое?
Выберите PC-раскладку в настройках, а то придумали себе проблему.
Хотя, например, у меня (да, говорю только за себя) получается печатать ощутимо быстрее именно с запятой на шестерке и с точкой на семерке, потому что на PC-раскладке мизинцем приходится тянуться к ним.
Если хочется бОльшего контроля над раскладкой — Ukelele в помощь.
Не ожидал такого развернутого ответа.
Ну тогда наверное это сугубо индивидуально. Поделюсь личным опытом.

Я обычно подключаюсь к большому монитору и использую standalone клавиатуру + мышь. Маковская как -то не прижилась. Использую связки Logitech. Она корректно распознавались ОСью и все маппинги сразу же сделала по уму.

Жесты вы которые описали висят на шоркатах и на мышке (Hot Corners). Пользуюсь в зависимости от того где руки находятся в данный момент. Что до копирования, то всегда использовал мизинец+указательный так что от того что cmd был ближе пользы не почувствовал. Что до медия, то все медиакнопки работают нормально.
У меня установка хакинтоша свелась к загрузчику и специфичному ядру под AMD.
UFO just landed and posted this here
Ваш скрипт можно было написать следующим образом, его легче сопровождать:

#!/bin/bash

ROOT="/usr/share/applications";

APPS=(
	# Just not needed for others to know that i have this in my system.
	# I always can run them from cli. Вот
	'bleachbit-root.desktop'
	'bleachbit.desktop'
	'bum.desktop'
	'gparted.desktop'
	'guake.desktop'
	'luakit.desktop'
	'synaptic.desktop'
	'teamviewer-teamviewer9.desktop'
	'umit.desktop'
	'virtualbox.desktop'
	'wireshark.desktop'
	
	# Rubbish. То, что не запускаем отдельно,
	# а открывается автоматически при открытии соответствующего файла,
	# основываясь на file associations
	'AdobeAIR.desktop'
	'caffeine-preferences.desktop'
	'dropbox.desktop'
	'empathy.desktop'
	'evince.desktop'
	'file-roller.desktop'
	'gdebi.desktop'
	'gthumb.desktop'
	'gxneur.desktop'
	'ibus-setup.desktop'
	'libreoffice4.3-base.desktop'
	'libreoffice4.3-calc.desktop'
	'libreoffice4.3-draw.desktop'
	'libreoffice4.3-impress.desktop'
	'libreoffice4.3-math.desktop'
	'libreoffice4.3-writer.desktop'
	'noise.desktop'
	'pantheon-terminal.desktop'
	'totem.desktop'
	'update-manager.desktop'
	'vlc.desktop'
	
	# Скрыла, потому что эти приложения доступны из контекстного меню.
	# Посчитала излишним дублировать их в меню. Время покажет права ли я.
	'atom.desktop'
	'scratch-text-editor.desktop'
	'scribes.desktop'
	'sublime_text.desktop'
);

for app_name in "${APPS[@]}"; do {
	app_path="${ROOT}/${app_name}";
	echo -n "${app_path}... ";
	if [[ -e "${app_path}" ]]; then {
		echo -n $'[Desktop Entry]\nNoDisplay=true\n' >> "${app_path}";
		echo "OK";
	} else {
		echo "NOT FOUND";
	}; fi
}; done
Ура! Спасибо! Я бы так низачто не смогла написать. Вобщем я и программировать то не умею. Жаль лишь только что я пыталась изобрести велосипед, а вы мне в этом помогли. И ведь изобрели (
Ну, с умением программировать еще никто не родился. Учитесь, начинайте с велосипедов. Велосипеды помогают понять, как сделаны вещи.
Тут был лишний $ в начале:
echo -n '[Desktop Entry]\nNoDisplay=true\n' >> "${app_path}";
еще перед этим можно воткнуть
sed -e 's/[Desktop Entry]\nNoDisplay=true\n//g' "${app_path}" > "${app_path}";
во избежание дубликатов при повторном запуске… :)
Это не лишний $, а C-строковый литерал. В вашем варианте следовало бы писать echo -ne, иначе \n будет выведен, как есть.
По поводу избегания дубликатов при повторном запуске — вы натолкнули меня на мысль приделать к этим костылям велосипедный гудок.

#!/bin/bash

: ${DESKTOP_ROOT:='/usr/share/applications'}
: ${HIDERRC:="${HOME}/.hiderrc"}

function trim() {
	local s="${@}";
	s="${s#"${s%%[![:space:]]*}"}"; # trim leading whitespace
	s="${s%"${s##*[![:space:]]}"}"; # trim trailing whitespace
	
	echo -n "${s}";
};

function describe() {
	case "$1" in
		'yes') echo -n 'hidden'; ;;
		'no') echo -n 'visible'; ;;
	esac;
};

function to_bool() {
	case "$1" in
		'yes') echo -n 'true'; ;;
		'no') echo -n 'false'; ;;
	esac;
};

function is_shortcut_hidden() {
	local state='section';
	local hidden='no';
	
	while IFS='' read -r line; do
		if [[ "${line}" == '#'* ]]; then {
			continue; # skip over comment lines
		} fi;
		
		while [[ true ]]; do
			case "${state}" in
				'section')
					if [[ "$(trim ${line})" == '[Desktop Entry]' ]]; then {
						state='keyvalue';
					} fi;
					;;
				
				'keyvalue')
					if [[ "${line}" == '['*']' ]]; then {
						state='section';
						continue; # reinterpret current section
					} else {
						IFS='=' read -r key value < <(echo "${line}");
						
						if [[ "$(trim ${key})" == "NoDisplay" ]]; then {
							case "$(trim ${value})" in
								'0' | 'false') hidden='no' ;;
								'1' | 'true') hidden='yes' ;;
							esac;
						} fi;
					} fi;
					;;
			esac;
			
			break;
		done;
	done < "$1";
	
	echo -n "${hidden}";
};

function read_rc() {
	local section_hidden='yes';
	local path;
	local shortcut_hidden;
	
	if [[ ! -r "${HIDERRC}" ]]; then {
		return; # nothing to do if we have no conf
	} fi;
	
	while IFS='' read -r line; do
		if [[ "${line}" == '#'* ]]; then {
			continue; # skip over comment lines
		} fi;
		
		case "${line}" in
			'[hide]') section_hidden='yes' ;;
			'[show]') section_hidden='no' ;;
			*)
				if [[ "${line}" == '/'* ]]; then { # absolute path
					path="${line}";
				} else {
					path="${DESKTOP_ROOT}/${line}";
				} fi;
				
				shortcut_hidden="$(is_shortcut_hidden "${path}")";
				
				if [[ ! "${shortcut_hidden}" == "${section_hidden}" ]]; then { # action!
					echo "Shortcut ${path} should be $(describe "${section_hidden}"), but is $(describe "${shortcut_hidden}")";
					
					echo -n $'\n[Desktop Entry]\nNoDisplay='"$(to_bool "${section_hidden}")"$'\n' >> "${path}";
				} fi;
			;;
		esac;
	done < <(cat "${HIDERRC}"; echo);
};

read_rc;

пример ~/.hiderrc

# Just not needed for others to know that i have this in my system.
# I always can run them from cli. Вот
bleachbit-root.desktop
bleachbit.desktop
bum.desktop
gparted.desktop
guake.desktop
luakit.desktop
synaptic.desktop
teamviewer-teamviewer9.desktop
umit.desktop
virtualbox.desktop
wireshark.desktop

# Rubbish. То, что не запускаем отдельно,
# а открывается автоматически при открытии соответствующего файла,
# основываясь на file associations
AdobeAIR.desktop
caffeine-preferences.desktop
dropbox.desktop
empathy.desktop
evince.desktop
file-roller.desktop
gdebi.desktop
gthumb.desktop
gxneur.desktop
ibus-setup.desktop
libreoffice4.3-base.desktop
libreoffice4.3-calc.desktop
libreoffice4.3-draw.desktop
libreoffice4.3-impress.desktop
libreoffice4.3-math.desktop
libreoffice4.3-writer.desktop
noise.desktop
pantheon-terminal.desktop
totem.desktop
update-manager.desktop
vlc.desktop

# Скрыла, потому что эти приложения доступны из контекстного меню.
# Посчитала излишним дублировать их в меню. Время покажет права ли я.
atom.desktop
scratch-text-editor.desktop
scribes.desktop
sublime_text.desktop

пример синтаксиса ~/.hiderrc
# это комментарий!

# распознаются две секции - [show] и [hide].
# [show] делает все ярлыки в секции видимыми, [hide] их прячет.
# если секция не указана, то это считается [hide]
i_will_be_hidden.desktop

[show]
# если имя файла начинается с "/", считается, что это абсолютный путь к файлу
/absolute/path/to/file.desktop
# иначе имя файла считается относительным от пути в ${DESKTOP_ROOT}
relative/path/to/file.desktop

# секции могут повторяться и перемежаться
[hide]
foo.desktop
spaces are fine too.desktop


Этот скрипт можно закинуть в cron на выполнение раз в час, скажем, и он будет обновлять ярлыки, которые у него есть в списке, если их параметры видимости не отвечают требуемым. Содержимое .desktop-файлов корректно парсится, следуя вот этому.
багфиксы!
#!/bin/bash

: ${DESKTOP_ROOT:='/usr/share/applications'}
: ${HIDERRC:="${HOME}/.hiderrc"}

function trim() {
	local s="${@}";
	s="${s#"${s%%[![:space:]]*}"}"; # trim leading whitespace
	s="${s%"${s##*[![:space:]]}"}"; # trim trailing whitespace
	
	echo -n "${s}";
};

function describe() {
	case "$1" in
		'yes') echo -n 'hidden'; ;;
		'no') echo -n 'visible'; ;;
	esac;
};

function to_bool() {
	case "$1" in
		'yes') echo -n 'true'; ;;
		'no') echo -n 'false'; ;;
	esac;
};

function is_shortcut_hidden() {
	local state='section';
	local hidden='no';
	
	while IFS='' read -r line; do
		if [[ "${line}" == '#'* ]]; then {
			continue; # skip over comment lines
		} fi;
		if [[ "$(trim "${line}")" == '' ]]; then {
			continue; # skip over empty lines
		} fi;
		
		while [[ true ]]; do
			case "${state}" in
				'section')
					if [[ "$(trim ${line})" == '[Desktop Entry]' ]]; then {
						state='keyvalue';
					} fi;
					;;
				
				'keyvalue')
					if [[ "${line}" == '['*']' ]]; then {
						state='section';
						continue; # reinterpret current section
					} else {
						IFS='=' read -r key value < <(echo "${line}");
						
						if [[ "$(trim ${key})" == "NoDisplay" ]]; then {
							case "$(trim ${value})" in
								'0' | 'false') hidden='no' ;;
								'1' | 'true') hidden='yes' ;;
							esac;
						} fi;
					} fi;
					;;
			esac;
			
			break;
		done;
	done < "$1";
	
	echo -n "${hidden}";
};

function read_rc() {
	local section_hidden='yes';
	local path;
	local shortcut_hidden;
	
	if [[ ! -r "${HIDERRC}" ]]; then {
		return; # nothing to do if we have no conf
	} fi;
	
	while IFS='' read -r line; do
		if [[ "${line}" == '#'* ]]; then {
			continue; # skip over comment lines
		} fi;
		if [[ "$(trim "${line}")" == '' ]]; then {
			continue; # skip over empty lines
		} fi;
		
		case "${line}" in
			'[hide]') section_hidden='yes' ;;
			'[show]') section_hidden='no' ;;
			*)
				if [[ "${line}" == '/'* ]]; then { # absolute path
					path="${line}";
				} else {
					path="${DESKTOP_ROOT}/${line}";
				} fi;
				
				if [[ ! -e "${path}" ]]; then {
					>&2 echo "Shortcut ${path} is missing!";
					continue;
				} fi;
				
				shortcut_hidden="$(is_shortcut_hidden "${path}")";
				
				if [[ ! "${shortcut_hidden}" == "${section_hidden}" ]]; then { # action!
					echo "Shortcut ${path} should be $(describe "${section_hidden}"), but is $(describe "${shortcut_hidden}")";
					
					echo -n $'\n[Desktop Entry]\nNoDisplay='"$(to_bool "${section_hidden}")"$'\n' >> "${path}";
				} fi;
			;;
		esac;
	done < <(cat "${HIDERRC}"; echo);
};

read_rc;
You made my day. Спасибо!

Ждем L10N, багфиксы к L10N и — ну вы поняли — гисты с багфиксами.
Круто. У меня три вопроса:

  • Чем присваивание вида :${VAR='value'} лучше VAR='value'?
  • Зачем фигурные скобки в if? Как и точки с запятой на концах строк, они выглядят излишними.
  • Почему переменные в read_rc() в нижнем регистре? Мне казалось, принято всегда заглавными.

  1. присваивание : ${VAR:='value'} лучше, чем просто VAR='value' тем, что если VAR уже назначен до вызова скрипта, то присваивания не произойдет — таким образом, HIDERRC и DESKTOP_ROOT можно переопределить через переменные окружения, при вызове в командной строке (HIDERRC=/private/etc/hiderrc DESKTOP_ROOT=/Applications/ hider.sh) или в каком-нибудь bash_profile на усмотрение.
  2. затем же, зачем "${FOO}" вместо "$FOO" — это единый стиль без какого-то существенного обоснования. Насколько мне известно, фигурные скобки делают ничего.
  3. локальные переменные — в нижнем регистре, глобальные — в заглавном, именование pascal_case-ом. опять же, на вкус и цвет… вы всегда можете форкнуть скрипт и исправить в нем то, что по вашему не так ;)
А можно мне того же отсыпать немного? :)
вы натолкнули меня на мысль
Вот это вас торкнуло!) Простите, я не хотел)))
«лижит» в папочке «in dev»…
Либо лижет, либо лежит :)
Эх. Я надеялся, что написанная таким слогом статья будет чем-то достаточно крутым, что бы разорвать шаблон у читателя. А тут в фантик из милых ошибок, смайликов и розовых медвежат завернут примитивный ученический скрипт.
Ну так напишите лучше! Вот серьёзно, почему бы не показать самому класс, до которого другие ещё не доросли, вместо того, чтобы ждать, когда придёт луноликий гуру и напишет великую статью о том, как «сделать зашибись»?

Я тоже надеялся на что-то более серьёзное в статье и был несколько разочарован содержимым. Но всё равно поставил ей плюс, по двум причинам: написано хорошо, и тема затронута правильная. Мне было бы приятно увидеть больше статей, мотивирующих копаться в недрах системы. И пускай это начинается с банальной настройки .desktop-файлов. Все начинают с азов.
Нет такого пользователя, который не пытался бы настроить свой рабочий стол по особенному, но и тебя вылечат, и меня вылечат со временем это прохоит
Приятно, когда пишут про твой любимый дистрибутив! Да, мне кажется или кнопки на нижней панели выглядят большими, чем стандартные? Выглядит очень здорово, да и попадать в такие удобнее.
Согласен. очень приятно
А у меня возник вопрос а как добавить иконку приложения допустим, я скачал Pycharm, который запускается из sh файла. Как на него иконку приладить?
  • Создайте симлинк (ссылку) к вашему файлу*.sh
    Пример:
    sudo ln -s ~/Documents/ИмяФайла.sh /usr/local/bin/ИмяФайлаМожетеПридуматьЛюбоеКакоеХотите

    Теперь ваш скрипт будет запускаться командой ИмяФайлаМожетеПридуматьЛюбоеКакоеХотите
  • Возьмите пример любого *.desktop файла из /usr/share/applications/ (системная папака) и положите его в ~/.local/share/applications (папка пользователя)
  • Положите иконку нужного размера (например 64х64) в ~/.icons. (Если возможно возьмите иконку *.svg так как они безразмерные и растянуться хорошо.)
  • Настройте файл *.desktop
  • Выйдите и заново войдите в систему.
Tools → Create Desktop Entry… (прямо из PyCharm)
Не самая лучшая реализация.
Гораздо лучше не трогать desktop-файлы в /usr/share/applications, а скопировать «кривые» из них в ~/.local/share/applications, где и делать с ними всё что угодно.
Поскольку, находясь в домашнем каталоге, они имеют приоритет над системными, в разного рода меню будут отображаться именно они. А обновления приложений никоим образом на меню не повлияют, поэтому не придётся запускать скрипты каждый раз.

P.S. Грамматические ошибки в статье тоже сильно в глаза бросаются, лучше бы их исправить.
Я GUI линукса только на картинках видел, а так все shell да shell.
Отлично! Ждём следующие статьи!
Приятно сделали. Только скрипты можно было бы и в цикл завернуть, у вас там всего 2 действия. А вообще, вам на ЛОР прямая дорога, будем рады вас там видеть =)
даааа, на ЛОРе максимально дружелюбная публика!
Неадекватов хватает, но в топиках с вопросами всегда оперативно помогали. А так, да. Дурдом еще тот.
Девушка, которая шарит в коде, так же как и девушка, которая катается на сноуборде — богоподобна
Да вы задрали с этим, серьезно. Вот этими вот сравнениями вы даете полноценный повод феминистической мразоте потом травить астрофизиков за принт рубашки и постить сравнения, чем именно собаки лучше мужчин. Нет ни малейшей разницы, кто шарит в коде, девушка или парень, если они действительно шарят. Если не шарят — пол тоже не оправдание. Мозг или есть, или его нет, и от пола это не зависит, и программирование ничем не отличается от любого другого скилла, который можно развить.
Решила всё же подвести итог на основании полученных комментариев:

  • Alacarte не подходит для решения поставленной задачи, так как работает криво. Я проверила на своём компьютере.
    Получается что изобретённый велосипед совсем не бесполезен, как я сперва думала, а очень даже нужен.
  • Если вы успели поставить alacarte без гномьих зависимостей по совету Adiost, не забудьте снести в месте c alacarte ещё и python-gmenu, который устанавливается прицепом к нему.
  • Очень благодарна всем за участие в теме. И отдельное спасибо непосредственно программистам scg, powerman, zloddey и mwizard которые и довели до логического завершения моё начинание.


Урааааа!
Sign up to leave a comment.

Articles