Вопрос или проблема
При использовании действия “Выключить” в Gnome, если есть некоторые графические приложения с несохраненными изменениями (например, текстовый редактор), появится сообщение “Некоторые приложения заняты или имеют несохраненную работу”.
Я ищу способ установить этот статус “несохраненный” из командной строки. Так я смогу интегрировать это в свой рабочий процесс, когда использую tmux
/neovim
, чтобы случайно не выключить ПК, когда у меня открыты некоторые сессии.
Выяснил, что можно использовать инструмент gnome-session-inhibit
для установки флага для сеанса Gnome, чтобы “подавить” некоторые действия (выход в данном случае).
$ gnome-session-inhibit --app-id APP_ID --reason reason --inhibit logout --inhibit-only
Единственное замешательство заключается в том, что для APP_ID вам следует использовать что-то, что имело .desktop
файл (см. endSessionDialog.js#L173 для деталей). Например, вы можете использовать --app-id vim
.
Ответ или решение
Чтобы уведомить Ubuntu/Gnome о том, что приложение занято и избежать непреднамеренного завершения работы системы, вы можете воспользоваться инструментом gnome-session-inhibit
. Это полезно, особенно если вы используете такие утилиты, как tmux
или neovim
, и хотите гарантировать, что ваши сессии не будут потеряны из-за неожиданного отключения питания. В этом ответе мы рассмотрим, как использовать gnome-session-inhibit
для достижения этой цели.
Что такое gnome-session-inhibit?
gnome-session-inhibit
— это утилита командной строки, которая позволяет инхибировать (то есть временно приостанавливать) определённые действия в Gnome, такие как выход из системы или завершение сеанса. Ваша задача — создать индикацию того, что приложение занято, чтобы система не завершила сеанс.
Как использовать gnome-session-inhibit?
Чтобы использовать gnome-session-inhibit
, необходимо выполнить команду, указывая необходимые параметры. Вот синтаксис команды:
gnome-session-inhibit --app-id APP_ID --reason "Your reason here" --inhibit logout --inhibit-only
Параметры команды:
-
--app-id
: уникальный идентификатор приложения. Это должно совпадать с.desktop
файлом вашего приложения. Например, дляvim
это будетvim.desktop
. -
--reason
: текстовое сообщение, объясняющее причину инхибирования. Это сообщение отображается пользователю и может помочь в понимании ситуации. -
--inhibit
: действие, которое необходимо инхибировать (например,logout
,shutdown
,sleep
и т.д.). -
--inhibit-only
: этот параметр гарантирует, что инхибирование будет выполнено только для указанных действий.
Пример использования
Допустим, вы хотите заблокировать действие выхода (logout
) для vim
. В этом случае вы можете выполнить следующую команду в терминале:
gnome-session-inhibit --app-id vim --reason "Editing session is active" --inhibit logout --inhibit-only
Это создаст статус, который сообщит Gnome, что приложение vim
занято и не должно быть завершено.
Как интегрировать с tmux
или neovim
В случае использования tmux
или neovim
, вы можете добавить команду gnome-session-inhibit
в скрипты или конфигурационные файлы, чтобы автоматизировать процесс при открытии или приостановке сессий. Например, вы можете создать скрипт start_neovim.sh
:
#!/bin/bash
gnome-session-inhibit --app-id neovim --reason "Neovim editing session is active" --inhibit logout --inhibit-only &
nvim
# После завершения работы с nvim, завершите инхибирование
pkill -f "gnome-session-inhibit --app-id neovim"
Заключение
Используя gnome-session-inhibit
, вы добавляете важный уровень защиты к вашим рабочим процессам на Ubuntu/Gnome, что позволяет избежать потерь данных и неожиданных завершений сеансов. Внедрение этой команды в ваши привычные рабочие процессы, такие как комбинации tmux
и neovim
, значительно улучшит вашу опыт работы. Не забывайте, что правильно настроенный рабочий процесс может сэкономить вам время и нервы в будущем.