Что это значит? ** (gedit: 2429): ПРЕДУПРЕЖДЕНИЕ **: Не удалось установить метаданные документа: установка метаданных атрибута :: gedit-encoding не поддерживается [dубликат]

Ничего себе, да, это крушение «единственного окна-декоратора». Основной причиной этого является основной сервер X. Этого не должно быть. Это лучше всего рассматривать как отчет об ошибке для Ubuntu, поэтому я предлагаю:

Измените /etc/default/apport и установите enabled=1. Перезагрузитесь. Войдите в систему и начните делать вещи. Когда произойдет сбой, вы получите запросите ошибку, следуйте инструкциям. Впоследствии отключите apport (enabled=0), поскольку он потребляет дополнительные ресурсы.

Как способ остановить это от неприятностей, я могу предложить две вещи:

Использовать «классическую» среду, которая не использует Unity или не стресс для графического оборудования, поэтому много. Обновите Ubuntu 11.10, все может быть более стабильным, и если вы продолжите испытывать ту же проблему, вы можете переключиться на Unity 2d, что намного ближе к тому опыту, к которому вы привыкли.
26
задан 7 September 2017 в 21:01

7 ответов

Во-первых, мне также кажется, что это раздражает, что эти предупреждения появляются на готовом Ubuntu, без «правильного» метода, чтобы отключить их, которые я мог найти (кажется, что наиболее распространенным «решением» является либо установить gir1.2-gtksource-3.0, который, похоже, не работает, поскольку он уже установлен, или игнорировать их, но я хочу полностью их отключить, поскольку они просто заставляют мой терминал шумно).

Я придумал следующий код, который до сих пор ведет себя точно так, как я ожидал, и основывается на ответе TuKsn, но немного увеличивает его:

Работает по умолчанию (gedit ...) без необходимо использовать F12 или какой-либо другой ярлык (для вызова нефильтрованного использования /usr/bin/gedit ...). Отображает введенное имя команды, когда оно завершается в качестве фоновой задачи.

До сих пор можно немного обобщить, но на данный момент, если вам нужна такая же обработка для других команд, дублируйте функцию gedit() для каждого другого имени команды, для которого нужен тот же фильтр.

# solution adapted from: http://askubuntu.com/questions/505594 # TODO: use a list of warnings instead of cramming all of them to a single grep. # TODO: generalize gedit() to allow the same treatment for several commands # without duplicating the function with only a different name # output filter. takes: name_for_history some_command [arguments] # the first argument is required both for history, but also when invoking to bg # such that it shows Done <name> ... instead of e.g. Done /usr/bin/gedit ... suppress-gnome-warnings() { # $1 is the name which should appear on history but is otherwise unused. historyName=$1 shift if [ -n "$*" ]; then # write the real command to history without the prefix # syntax adapted from http://stackoverflow.com/questions/4827690 history -s "$historyName ${@:2}" # catch the command output errorMsg=$( $* 2>&1 ) # check if the command output contains not a (one of two) GTK-Warnings if ! $(echo $errorMsg | grep -q 'Gtk-WARNING\|connect to accessibility bus'); then echo $errorMsg fi fi } gedit() { suppress-gnome-warnings $FUNCNAME $(which $FUNCNAME) $@ }

И лучшая версия (путь меньше, полностью общий, не нужно переписывать историю с момента вызова как есть, и лучше для фильтрации на строку, а не весь вывод):

# generates a function named $1 which: # - executes $(which $1) [with args] # - suppresses output lines which match $2 # e.g. adding: _supress echo "hello\|world" # will generate this function: # echo() { $(which echo) "$@" 2>&1 | tr -d '\r' | grep -v "hello\|world"; } # and from now on, using echo will work normally except that lines with # hello or world will not show at the output # to see the generated functions, replace eval with echo below # the 'tr' filter makes sure no spurious empty lines pass from some commands _supress() { eval "$1() { \$(which $1) \"\$@\" 2>&1 | tr -d '\r' | grep -v \"$2\"; }" } _supress gedit "Gtk-WARNING\|connect to accessibility bus" _supress gnome-terminal "accessibility bus\|stop working with a future version" _supress firefox "g_slice_set_config"
12
ответ дан 18 July 2018 в 05:13

Во-первых, мне также кажется, что это раздражает, что эти предупреждения появляются на готовом Ubuntu, без «правильного» метода, чтобы отключить их, которые я мог найти (кажется, что наиболее распространенным «решением» является либо установить gir1.2-gtksource-3.0, который, похоже, не работает, поскольку он уже установлен, или игнорировать их, но я хочу полностью их отключить, поскольку они просто заставляют мой терминал шумно).

Я придумал следующий код, который до сих пор ведет себя точно так, как я ожидал, и основывается на ответе TuKsn, но немного увеличивает его:

Работает по умолчанию (gedit ...) без необходимо использовать F12 или какой-либо другой ярлык (для вызова нефильтрованного использования /usr/bin/gedit ...). Отображает введенное имя команды, когда оно завершается в качестве фоновой задачи.

До сих пор можно немного обобщить, но на данный момент, если вам нужна такая же обработка для других команд, дублируйте функцию gedit() для каждого другого имени команды, для которого нужен тот же фильтр.

# solution adapted from: http://askubuntu.com/questions/505594 # TODO: use a list of warnings instead of cramming all of them to a single grep. # TODO: generalize gedit() to allow the same treatment for several commands # without duplicating the function with only a different name # output filter. takes: name_for_history some_command [arguments] # the first argument is required both for history, but also when invoking to bg # such that it shows Done <name> ... instead of e.g. Done /usr/bin/gedit ... suppress-gnome-warnings() { # $1 is the name which should appear on history but is otherwise unused. historyName=$1 shift if [ -n "$*" ]; then # write the real command to history without the prefix # syntax adapted from http://stackoverflow.com/questions/4827690 history -s "$historyName ${@:2}" # catch the command output errorMsg=$( $* 2>&1 ) # check if the command output contains not a (one of two) GTK-Warnings if ! $(echo $errorMsg | grep -q 'Gtk-WARNING\|connect to accessibility bus'); then echo $errorMsg fi fi } gedit() { suppress-gnome-warnings $FUNCNAME $(which $FUNCNAME) $@ }

И лучшая версия (путь меньше, полностью общий, не нужно переписывать историю с момента вызова как есть, и лучше для фильтрации на строку, а не весь вывод):

# generates a function named $1 which: # - executes $(which $1) [with args] # - suppresses output lines which match $2 # e.g. adding: _supress echo "hello\|world" # will generate this function: # echo() { $(which echo) "$@" 2>&1 | tr -d '\r' | grep -v "hello\|world"; } # and from now on, using echo will work normally except that lines with # hello or world will not show at the output # to see the generated functions, replace eval with echo below # the 'tr' filter makes sure no spurious empty lines pass from some commands _supress() { eval "$1() { \$(which $1) \"\$@\" 2>&1 | tr -d '\r' | grep -v \"$2\"; }" } _supress gedit "Gtk-WARNING\|connect to accessibility bus" _supress gnome-terminal "accessibility bus\|stop working with a future version" _supress firefox "g_slice_set_config"
12
ответ дан 24 July 2018 в 18:16

Я на самом деле написал инструмент hide-warnings в C, который мне намного проще использовать, чем скрипт, показанный выше. Кроме того, он будет записывать все выходные данные, записанные в stdout по умолчанию (поскольку Gtk и другие предупреждения отправляются на stderr, поэтому он по умолчанию анализирует stderr не stdout).

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

Инструмент может использоваться в простом псевдониме:

alias gvim="hide-warnings gvim"

(Я использую gvim ... Я уверен, что это будет работать с gedit тоже.)

Файл является автономным, никаких зависимостей, отличных от библиотеки C, поэтому вы можете получить копию и легко скомпилировать ее и установить:

gcc hide-warnings.c -o hide-warnings sudo cp hide-warnings /usr/bin/.

В файле есть еще одна документация, и вы можете использовать --help после компиляции для быстрых документов.

1
ответ дан 18 July 2018 в 05:13

Это также обходной путь, но вам не нужно применять его для каждого приложения.

Запишите это на свой .bashrc, и вы можете использовать эту оболочку с F12 (или выбрать другой ключ), чтобы подавить предупреждения:

# output filter of() { if [ -n "$*" ]; then # write the real command to history without the prefix "of" history -s "$*" # catch the command output errorMsg=$( $* 2>&1 ) # check if the command output contains not a GTK-Warning if ! $(echo $errorMsg | grep -q 'Gtk-WARNING'); then echo $errorMsg fi fi } # write the function "of" before every command if the user presses F12 bind '"\e[24~": "\e[1~ of \e[4~\n"'
2
ответ дан 18 July 2018 в 05:13

Я на самом деле написал инструмент hide-warnings в C, который мне намного проще использовать, чем скрипт, показанный выше. Кроме того, он будет записывать все выходные данные, записанные в stdout по умолчанию (поскольку Gtk и другие предупреждения отправляются на stderr, поэтому он по умолчанию анализирует stderr не stdout).

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

Инструмент может использоваться в простом псевдониме:

alias gvim="hide-warnings gvim"

(Я использую gvim ... Я уверен, что это будет работать с gedit тоже.)

Файл является автономным, никаких зависимостей, отличных от библиотеки C, поэтому вы можете получить копию и легко скомпилировать ее и установить:

gcc hide-warnings.c -o hide-warnings sudo cp hide-warnings /usr/bin/.

В файле есть еще одна документация, и вы можете использовать --help после компиляции для быстрых документов.

1
ответ дан 24 July 2018 в 18:16

Я искал, чтобы найти полезность для решения этой проблемы.

Мои проблемы с предоставленными ответами таковы:

важно, чтобы stdout и stderr don 't агрегировать в один поток, я не могу вызывать команду, фильтровать весь вывод до тех пор, пока он не завершится, и напечатать его в конце (т. е. решение должно корректно вывести результат). Я хотел бы сохранить порядок сообщений stdout и stderr как насколько это возможно

Я ценю попытки, которые я видел, чтобы сделать это с Bash, однако я не смог определить решение, которое достигло всех трех условий, описанных выше.

My окончательное решение написано в NodeJS, которое, как я понимаю, не будет установлено во многих ящиках Linux. Прежде чем выбрать запись JS-версии, я попытался закодировать ее в python и нашел, что асинхронная IO-библиотека довольно уродлива и разбита до тех пор, пока ОЧЕНЬ последние версии python (~ 3.5, которые доступны вне коробки на некоторых более новых дистрибутивах). .

Минимизация зависимостей была единственной причиной выбора python, поэтому я отказался от нее для NodeJS, у которого есть замечательный набор библиотек для несколько низкоуровневого асинхронного IO.

Вот он:

#!/usr/bin/env nodejs const util = require('util') const spawn = require('child_process').spawn function usage() { let msg = util.format( 'Usage: %s <filter regex> <command> [<command argument>..]', process.argv[1] ) console.error(msg) process.exit(1) } function filter_err(cmd, err_regex) { let proc = spawn(cmd[0], cmd.slice(1), { shell: true, stdio: ['inherit', 'inherit', 'pipe'] }) proc.stderr.on('data', (err) => { err = err.toString('utf8') var filter = new RegExp(err_regex) if (! err.match(filter)) process.stderr.write(err) }) proc.on('close', (code) => process.exit(code)) } if (process.argv.length < 4) usage() let err_regex = process.argv[2] let cmd = process.argv.slice(3) filter_err(cmd, err_regex)
0
ответ дан 24 July 2018 в 18:16

Это также обходной путь, но вам не нужно применять его для каждого приложения.

Запишите это на свой .bashrc, и вы можете использовать эту оболочку с F12 (или выбрать другой ключ), чтобы подавить предупреждения:

# output filter of() { if [ -n "$*" ]; then # write the real command to history without the prefix "of" history -s "$*" # catch the command output errorMsg=$( $* 2>&1 ) # check if the command output contains not a GTK-Warning if ! $(echo $errorMsg | grep -q 'Gtk-WARNING'); then echo $errorMsg fi fi } # write the function "of" before every command if the user presses F12 bind '"\e[24~": "\e[1~ of \e[4~\n"'
2
ответ дан 24 July 2018 в 18:16
  • 1
    Это выглядит немного лучше. Я собираюсь проверить это. – FUZxxl 2 August 2014 в 15:19

Другие вопросы по тегам:

Похожие вопросы: