Я запускаю удивительный оконный менеджер на верном после обновления от raring. В моей среде рабочего стола преднамеренно не работают все демоны Gnome / Freedesktop - я не хочу их.
Когда я выполняю gedit
из терминала, как это:
gedit file
Такие сообщения выводятся по всему моему терминалу всякий раз, когда я нажимаю клавишу ввода или сохранения или в других случаях:
(gedit:5700): Gtk-WARNING **: Calling Inhibit failed: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SessionManager was not provided by any .service files
Я понимаю значение этого предупреждения и решил, что оно не имеет для меня значения.
Как я могу отключить это предупреждение? Под «выключением» я не подразумеваю ни одно из этих или подобных обходных путей:
- направить вывод Gedit в
/dev/null
- написание скрипта-обёртки, который передает вывод gedit в
/dev/null
- создавая псевдоним, который передает вывод gedit в
/dev/null
Эти обходные пути неприемлемы, так как они должны применяться индивидуально к каждому приложению Gnome - gedit не единственный, кто любит портить терминал.
export GCONF_DEBUG="no"
бы что-нибудь сделалоОтветы:
Во-первых, меня также раздражает, что эти предупреждения появляются в готовой Ubuntu без «правильного» метода их отключения, который я мог бы найти (кажется, что наиболее распространенным «решением» является установка
gir1.2-gtksource-3.0
который, кажется, не работает, так как он уже установлен, или игнорировать их - но я хочу полностью их отключить, поскольку они просто делают мой терминал шумным).Я придумал следующий код, который до сих пор, кажется, ведет себя именно так, как я ожидал, и основан на ответе TuKsn, но немного улучшает его:
gedit ...
) без необходимости использовать F12 или какой-либо другой ярлык (чтобы вызвать нефильтрованное использование/usr/bin/gedit ...
).Можно все же немного обобщить, но сейчас, если вам нужна такая же обработка для других команд, продублируйте
gedit()
функцию для каждого имени команды, для которого нужен тот же фильтр.И лучшая версия (намного меньше, полностью универсальная, не нужно переписывать историю, так как вызывается как есть, и лучше для фильтрации по строке, а не по всему выводу):
источник
Это также обходной путь, но вам не нужно применять это для каждого приложения.
Напишите это вашему,
.bashrc
и вы можете использовать эту оболочку с F12 (или выбрать другую клавишу), чтобы скрыть предупреждения:источник
На самом деле я написал инструмент скрытия предупреждений на C, который, как мне кажется, намного проще в использовании, чем скрипт, показанный выше. Кроме того, он запишет все выходные данные, записанные
stdout
по умолчанию (поскольку Gtk и другие предупреждения отправляются,stderr
поэтому онstderr
не анализируетсяstdout
по умолчанию).Одна большая проблема с приведенным выше сценарием заключается в том, что он не будет ничего записывать на вашу консоль, даже если он не соответствует регулярному выражению, пока не будет выполнено. Это потому, что он сохраняет все данные в переменной, а затем выполняет grep этой переменной. Это также означает, что он сохранит вывод в этой переменной, возможно, используя много памяти (по крайней мере, вы должны сохранить это во временном файле). Наконец, из того, что я вижу, grep предотвратит любое отображение, если какая-либо строка соответствует , Может быть, не совсем то, что вы хотите.
Инструмент можно использовать в простом псевдониме, например:
(Я использую
gvim
... Я уверен, что это будет работатьgedit
тоже.)Файл самодостаточен, никаких зависимостей, кроме библиотеки C, нет, поэтому вы можете получить копию и легко скомпилировать и установить ее:
В этом файле есть дополнительная документация, и вы можете использовать ее
--help
после компиляции для быстрой документации.Более новая версия , которая в какой-то момент будет использовать библиотеку advgetopt, находится на C ++.
источник
Я сам искал утилиту для решения такого рода проблем.
Мои проблемы с предоставленными ответами следующие:
Я ценю попытки, которые я видел, чтобы сделать это с Bash, однако мне не удалось найти решение, которое выполнило бы все 3 условия, описанные выше.
Мое окончательное решение написано на NodeJS, который, как я понимаю, не будет установлен на многих Linux-блоках. Прежде чем написать версию JS, я попытался закодировать ее на python и обнаружил, что библиотека асинхронного ввода-вывода довольно уродлива и не работает до ОЧЕНЬ последних версий python (~ 3.5, которые доступны в некоторых новых дистрибутивах).
Минимизация зависимостей была ЕДИНСТВЕННОЙ причиной выбора python, поэтому я отказался от него для NodeJS, который имеет замечательный набор библиотек для несколько низкоуровневых асинхронно-ориентированных операций ввода-вывода.
Вот:
Чтобы использовать этот скрипт, вы можете добавить эти строки в ваш .bashrc:
Подпроцесс, который вы выберете для запуска, унаследует стандартный ввод, поэтому вы можете свободно использовать каналы BASH или перенаправление.
источник