Я установил Ubuntu GNOME и обнаружил, что получаю много сообщений «ПРОГРАММА не отвечает».
Мне приходится либо «принудительно завершить» программу, либо «подождать» еще немного.
Я заметил, что каждый раз, когда я жду программу, она в конечном итоге продолжается без проблем.
Так что ядуматьВозможно, существует настройка «тайм-аута» для программ, которые считаются не отвечающими, и я хочу увеличить этот тайм-аут.
решение1
Его невозможно было настроить, потому чтотайм-аутзначение определено как константа в исходном коде mutter. gnome-shell ссылается на библиотеку mutter. Я нашел значение тайм-аута в исходном коде mutter, mutter-3.10.4/src/core/display.c.
...
#define PING_TIMEOUT_DELAY 5000
И это используется функцией, которая называется meta_display_ping_window.
ping_data->ping_timeout_id = g_timeout_add (PING_TIMEOUT_DELAY, meta_display_ping_timeout, ping_data);
Ссылка на него осуществляется из функции при активации окна:
window_activate(mutter-3.10.4/src/core/window.c) -> meta_window_check_alive(mutter-3.10.4/src/core/delete.c) -> meta_display_ping_window(mutter-3.10.4/src/core/display.c)
Как вы можете видеть выше, тайм-аут составляет 5 секунд.
Вы можете изменить значение специально для себя, поскольку Mutter — проект с открытым исходным кодом.
И значение таймаута относится к другому случаю, когда окно закрыто. Поток удаления окна такой
meta_window_delete(mutter-3.10.4/src/core/delete.c) -> meta_window_check_alive(mutter-3.10.4/src/core/delete.c) -> meta_display_ping_window(mutter-3.10.4/src/core/display.c)
Однако я думаю, что вам нужно изменить исходный код для вашего окна с задержкой. Или я думаю, что вы можете обсудить это с разработчиками/сопровождающими mutter.
Вы можете подготовить среду сборки и получить исходный код с помощью следующих команд.
$ sudo apt-get build-dep mutter
$ sudo apt-get source mutter
Чтобы построить его, см.
https://www.debian.org/doc/manuals/apt-howto/ch-sourcehandling.en.html https://wiki.debian.org/BuildingTutorial
решение2
Значение mutter можно изменить через dconf (/org/gnome/mutter/check-alive-timeout) — по умолчанию 5000.
решение3
Эта ошибка была исправлена. Backport был выпущен для Ubuntu 18 как gnome-shell 3.28.4 2019-6-6. СмотретьКак отключить диалоговое окно «Окно не отвечает»
решение4
Не знаю, имеет ли смысл отвечать на этот старый вопрос, но, возможно, кому-то это будет полезно.
Я пытался собрать библиотеку Mutter из исходного кода, но сдался, потому что эта библиотека зависит от многих других библиотек, а эти библиотеки также зависят от других библиотек.
Мне нужен был способ закрыть это диалоговое окно, если оно появилось, но я не смог закрыть его ввиноприложение. Поэтому я написал небольшой скрипт на bash, который убьет это окно, если оно появится.
#!/bin/bash
while [ true ]; do
VAL=$(ps -fA | grep "class mutter-dialog" | grep -cv grep)
if [ $VAL -eq 1 ]
then
ID=$(ps -fA | grep "class mutter-dialog" | grep -v grep | awk '{print $2}')
sleep 5
echo killing $ID
kill $ID
exit 0
fi
sleep 10
done