Atualização: é a nVidia
Stephen Dowdy respondeu ao relatório de erros do Debian e sugeriu que pode ser um bug da nVidia. onde está corrompendo máscaras de sinal. Algumas pesquisas encontraram o Debian Bug # 728743 , e de fato mudaram para o Nouveau / MESA -source driver) corrigiu o problema.
Observe que o downgrade para um driver nVidia mais antigo não o fez, o que provavelmente significa que são os drivers da nVidia + algumas versões mais recentes de outras coisas, que eu não me incomodei em rastrear como um comentarista no bug. 331,38. (Estou correndo 331,49 agora, e é realmente fixo).
Resultados da strace
Eu corri strace em ambas as versões. Após alguma filtragem (para fazer o diff funcionar melhor), vejo várias linhas como:
WORKING rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
*vs*
BROKEN rt_sigprocmask(SIG_BLOCK, NULL, [HUP], 8) = 0
Parece que a versão quebrada tem o SIGHUP bloqueado. Clicar no X parece enviar um SIGHUP, que é ignorado, então o shell não sai. Você pode fazer um trabalho quebrado, capturando SIGHUP no shell, e não saindo (mas não o contrário, pois parece que o shell nunca recebe o HUP).
Arquivei o erro da Debian # 733816 sobre isso.
Como solução alternativa, você pode agrupar comandos de tecla de atalho usando este programa C trivial:
#include <signal.h>
#include <stddef.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
sigset_t set;
if (argc < 2) {
fprintf(stderr, "ERROR: Expected at least a command to run\n"
"\n"
"USAGE: %s command [arguments]\n",
argv[0]);
exit(EXIT_FAILURE);
}
sigemptyset(&set);
sigaddset(&set, SIGHUP);
sigprocmask(SIG_UNBLOCK, &set, NULL);
execvp(argv[1], argv+1);
}
Use-o compilando (digamos, para ~/bin/unblock-hup
), em seguida, chame ~/bin/unblock-hup xterm
em vez de xterm
. Observe que, no módulo de controle Atalhos personalizados, você precisa colocar o caminho completo em seu diretório pessoal; ~
não funciona.