mostrar uma notificação em todos os monitores x em execução
<p>usando a linha de comando, gostaria de mostrar uma notificação em cada exibição do x em execução. (e console em execução)</p><p>algo como:</p><pre><code>notify-send-all 'warning' 'nuclear launch in 5 minutes, please evacuate' </code></pre><p>existe um programa que fará isso? se não, isso pode ser implementado com o bash?</p>
<p>você pode enviar uma mensagem para todos os consoles com a parede de comando.</p><p>para enviar notificações em x, há notificação-envio que envia uma notificação para o usuário atual na tela atual. (pela sua pergunta, acho que você já conhece este.) você pode desenvolver isso com alguns scripts bash. basicamente, você tem que descobrir quais usuários estão em quais x-displays. depois de obter essas informações, você pode usar o envio de notificação desta forma:</p><pre><code>display=:0 sudo -u fschmitt notify-send "message" </code></pre><p>onde fschmitt é o usuário no display 0. você pode analisar a saída do comando "who" para localizar todos os usuários e seus displays. a saída é parecida com esta</p><pre><code>[edinburgh:~]$ who markmerk3 tty7 2010-09-23 10:59 (:0) markmerk3 pts/1 2010-09-30 13:30 (:0.0) fschmitt pts/2 2010-10-08 11:44 (ip-77-25-137-234.web.vodafone.de) markmerk3 pts/0 2010-09-29 18:51 (:0.0) seamonkey pts/6 2010-09-27 15:50 (:1.0) markmerk3 pts/5 2010-09-27 14:04 (:0.0) seamonkey tty8 2010-09-27 15:49 (:1) markmerk3 pts/13 2010-09-28 17:23 (:0.0) markmerk3 pts/3 2010-10-05 10:40 (:0.0) </code></pre><p>veja, há dois usuários executando sessões x, markmerk3 na tela 0 e seamonkey na tela 1. acho que você precisa grep for tty [0-9] * e garantir que no final da linha haja (: [0 -9.] *) para se livrar dos logins do console e extrair o id de exibição da string entre os parênteses.</p>
<p>você precisa esperar para apresentar o controlador de exibição restrita até o próximo ciclo de execução. acabei usando um bloco (para tornar as coisas mais simples) para agendar a apresentação para o próximo ciclo de execução:</p><p><strong> atualização: </strong><br> como mencionado por mark amery abaixo, apenas um simples <code>dispatch\_async</code> funciona, não há necessidade de um temporizador:</p><pre><code>dispatch\_async(dispatch\_get\_main\_queue(), ^(void){ [self.container presentmodalviewcontroller:nc animated:yes]; }); </code></pre><hr><pre><code>/* present next run loop. prevents "unbalanced vc display" warnings. */ double delayinseconds = 0.1; dispatch\_time\_t poptime = dispatch\_time(dispatch\_time\_now, delayinseconds * nsec\_per\_sec); dispatch\_after(poptime, dispatch\_get\_main\_queue(), ^(void){ [self.container presentmodalviewcontroller:nc animated:yes]; }); </code></pre> SendMessage não está disponível no BEF.  

  

Acredito que o mecanismo de notificação da tarefas concluídas do BTL serviria pra você. Porém infelizmente não temos o mecanismo de notificação de tarefas concluídas no Desktop, apenas no WES que é ativado via método WithNotification da api do BTL.  

  

Quanto a questão da boa prática, como você percebeu o BTL já fornece algo parecido, então não há nenhuma recomendação contra isso. acabei de descobrir um utilitário bem poderoso de controle de processos no terminal o nome dele é htop e com ele é possível fazer o que você quer mas vai ter que configurar ele para fazer isso no próprio utilitário

edit: [[htop]](https://plus.diolinux.com.br/uploads/default/original/2x/b/bf9b441cc78eb9fabbadaa634f575feeca2b97d8.png "htop.png")

eu consegui configurar e ordenar ele para uso de leitura e escrita do … <p>enviar uma nova linha <code>\n</code> executará o comando. <code>.end()</code> sairá do shell.</p><p>modifiquei o exemplo para trabalhar com o bash enquanto estou no osx.</p><pre><code>var terminal = require('child\_process').spawn('bash'); terminal.stdout.on('data', function (data) { console.log('stdout: ' + data); }); terminal.on('exit', function (code) { console.log('child process exited with code ' + code); }); settimeout(function() { console.log('sending stdin to terminal'); terminal.stdin.write('echo "hello $user. your machine runs since:"\n'); terminal.stdin.write('uptime\n'); console.log('ending terminal session'); terminal.stdin.end(); }, 1000); </code></pre><p>a saída será:</p><pre><code>sending stdin to terminal ending terminal session stdout: hello root. your machine runs since: stdout: 9:47 up 50 mins, 2 users, load averages: 1.75 1.58 1.42 child process exited with code 0 </code></pre> <p>o que significa "o tempo todo"? se acontecer uma vez por dia, eu escreveria um pequeno roteiro para testar os serviços para o estado de execução para descobrir se eles param em um horário específico. então tente descobrir o que mais está acontecendo ao mesmo tempo.</p><p>se acontecer a cada poucos minutos, monitoraria os processos com o 'monitor de processo' do sysinternal para descobrir quais arquivos/threads são acessados ​​por último antes de cair.</p> <p>fala ai allan, tudo bem? acredito que seja apenas uma questão de versão mesmo.</p>
<p><a href="https://www.electronjs.org/docs/api/browser-window#evento-close" rel="nofollow">https://www.electronjs.org/docs/api/browser-window#evento-close</a></p>
<p>nesse <em>link</em> informa que existe o evento <code>close</code>, ele será emitido quando a janela estiver para ser fechada.</p>
<p>espero ter ajudado.</p> <p>você provavelmente deseja o <a href="http://man7.org/linux/man-pages/man1/comm.1.html">tilitário de comunicação unix</a> . <a href="http://gnuwin32.sourceforge.net/packages/coreutils.htm">versões do windows</a> estão incluídas no gnuwin32</p><blockquote> <p>nome</p> <pre><code> comm - compare two sorted files line by line </code></pre> <p>sinopse</p> <pre><code> comm [option]... file1 file2 </code></pre> <p>descrição</p> <pre><code> compare sorted files file1 and file2 line by line. with no options, produce three-column output. column one contains lines unique to file1, column two contains lines unique to file2, and column three contains lines common to both files. -1 suppress lines unique to file1 -2 suppress lines unique to file2 -3 suppress lines that appear in both files </code></pre></blockquote> <p> <a href="http://oreilly.com/catalog/9780596009588">programação de sistemas linux</a> </p><p>você pode consultar isso também <a href="https://unix.stackexchange.com/questions/80/recommended-readings-batter-understating-of-unix-linux-internals">link</a> </p> <p>adicione esta linha ao seu .vimrc:</p><pre><code>command r !./% </code></pre><p>e então você pode simplesmente digitar ": r" enquanto no vim para executar o script ( <a href="http://www.calebmadrigal.com/vim-run-current-file/">vim-run-current-file</a> )</p> oi @gpcninja, isso é bastante pedido, mas na verdade já está em fase de teste. entra no app e vá em configurações e labs. lá você terá a opção de ativar. depois vá para as configurações de novo e o timer estará lá 🙂