Emuladores de terminal e comportamento btsync

3

Eu baixei o binário do BitTorrent Sync. O programa fornece apenas uma interface de interface da web. Eu estou tentando criar uma janela para o daemon, usando um emulador de terminal, porque eu não preciso de um sempre on-line btsync . Quando eu executo:

cd ~/.btsync/; konsole -e "./btsync --nodaemon"

o daemon btsync EXIT quando eu FECHO a janela do konsole clicando no botão X. Quando eu corro:

cd ~/.btsync/; uxterm -e "./btsync --nodaemon"

a janela xterm STILL RUNS quando eu clico no botão de fechamento da janela. Quando eu executo:

cd ~/.btsync/; urxvt -e "./btsync --nodaemon"

e eu fecho a janela rxvt , o btsync DAEMON STILL RUNS em segundo plano.

Eu estava tentando usar urxvt para atribuir um ícone e um título à "janela daemon" e minha única solução foi executar este script:

#!/bin/sh
cd ~/.btsync/
echo BitTorrent Sync Web UI: http://127.0.0.1:8888/gui/en/index.html
echo
exec ~/.btsync/btsync --log ~/.btsync/sync.log --nodaemon

usando esta linha de comando em um arquivo .desktop :

Exec=/usr/bin/urxvt -fn "xft:Inconsolata" -icon ~/.btsync/btsync.png -iconic -title "BitTorrent Sync" -e btsync; /bin/kill $(cat ~/.btsync/.sync/sync.pid)

usando /bin/kill para fechar o daemon quando a janela rxvt for fechada. Minha pergunta é: alguém sabe por que konsole , xterm , rxvt não compartilha o mesmo comportamento nesse caso? Não consigo usar x-terminal-emulator para generalizar meu código por esse motivo e tenho vários clientes com diferentes ambientes de desktop Linux em uso.

    
por 1e100 19.03.2014 / 18:12

1 resposta

2

A saída no fechamento do terminal é causada por uma das duas coisas:

  1. Obtendo um EOF em stdin
  2. Recebendo um SIGHUP

No meu teste, tanto o xterm quanto o Konsole fazem isso, então não está claro porque o comportamento seria diferente, a menos que você esteja recebendo sinais quebrados aleatoriamente de um bug recente da nVidia (embora agora corrigido) (veja Após a atualização, o botão X na barra de título não mais fecha o xterm .

Você pode usar nohup para garantir que nenhum deles saia.

Observarei, no entanto, que a sintaxe -e varia entre os emuladores de terminal. Por exemplo, konsole -e 'sleep 60' sairá imediatamente; xterm -e 'sleep 60' esperará 60 segundos. Se você remover as marcas de cotação - passando cada argumento como um argumento separado -, isso funcionará em ambos os terminais.

$ konsole -e sleep 60    # works
$ xterm -e sleep 60      # works
$ konsole -e 'sleep 60'  # FAILS
$ xterm -e 'sleep 60'    # works

Estritamente falando, a Política Debian diz que x-terminal-emulator -e deve funcionar como no xterm, mas especifica um comportamento que o xterm teve em um ponto (falharia no último caso) ... mas o xterm mudou seu comportamento. Veja Debian Bug 648271, 11.8.3 "Pacotes que fornecem um emulador de terminal", diz xterm - a opção diretamente para exec .

Então, pode ser que você esteja usando -e errado; você deveria estar fazendo:

cd ~/.btsync/; konsole -e ./btsync --nodaemon

Observe a falta de citações.

    
por 19.03.2014 / 22:11