Я не использую gnome, но вы должны иметь возможность делать то, что хотите, смешивая инструменты xbindkeys
и wmctrl
. (Первый может иметь графический интерфейс xbindkey-config
для упрощения настройки ).
xbindkeys
прослушивает события клавиатуры, настроенные вами в файле ~/.xbindkeysrc
, и запускает команду, когда их видит.
wmctrl
общается с соответствующими оконными менеджерами и просит их переместить, изменить размер, активировать окна, идентифицированные по идентификатору или имени.
Например, эта конфигурация должна активировать ваш emacs, когда вы набираете Alt=
"wmctrl -a emacs"
Alt+equal
Вместо двух таких привязок вы также можете использовать xdotool getactivewindow getwindowname
, чтобы найти имя текущего окна, а затем переключиться на другое окно. xdotool
также может активировать окна, если у вас есть проблемы с gnome и wmctrl
.
Единственный вариант, который я вижу, это поместить эту команду в ваш ~/.bash_logout
файл; этот файл выполняется, если текущая оболочка является оболочкой входа в систему, а текущая оболочка не является подоболочкой.
В исходном коде для bash, где команда считывается для оценки , он устанавливает обработчик сигналов тревоги для значенияTMOUT
:
if (interactive)
{
tmout_var = find_variable ("TMOUT");
if (tmout_var && var_isset (tmout_var))
{
tmout_len = atoi (value_cell (tmout_var));
if (tmout_len > 0)
{
old_alrm = set_signal_handler (SIGALRM, alrm_catcher);
alarm (tmout_len);
}
}
}
Этот обработчик тревог выглядит так:
static sighandler
alrm_catcher(i)
int i;
{
printf (_("\007timed out waiting for input: auto-logout\n"));
fflush (stdout);
bash_logout (); /* run ~/.bash_logout if this is a login shell */
jump_to_top_level (EXITPROG);
SIGRETURN (0);
}
Функцияbash_logout
определяется как:
void
bash_logout ()
{
/* Run our `~/.bash_logout' file if it exists, and this is a login shell. */
if (login_shell && sourced_logout++ == 0 && subshell_environment == 0)
{
maybe_execute_file ("~/.bash_logout", 1);
#ifdef SYS_BASH_LOGOUT
maybe_execute_file (SYS_BASH_LOGOUT, 1);
#endif
}
}
Решение было найдено здесь:
https://stackoverflow.com/questions/58502915/differentiate-between-exit-and-session-timeout
Используйте переменную оболочки PROMPT _COMMAND и вызовите пользовательскую функцию. В пользовательской функции вы можете проверить, истек ли тайм-аут простоя оболочки, и решить, была ли ловушка вызвана из-за тайм-аута или выхода из оболочки.