“Compartilhamento de tela” na linha de comando?

2

Se eu estiver logado em um servidor remoto, e alguém estiver logado no mesmo servidor, não há alguma maneira através da linha de comando para deixá-los "olhar por cima do meu ombro"?

É claro que eu poderia copiar e colar meu buffer de rolagem do terminal em intervalos e despejá-lo em um arquivo em /tmp , e eles poderiam cat desse arquivo ... que está perto do que eu estou falando, embora não teria cor.

Isso é muito diferente do significado típico de "compartilhamento de tela" porque não envolveria nenhum tráfego de rede adicional - apenas recursos locais. (Vocês dois já estão logados)

Eu tive pontuações de casos em apenas alguns meses onde isso teria sido extremamente útil.

Isso é possível? Como posso fazer isso?

    
por Wildcard 13.08.2016 / 06:32

6 respostas

3

Acabei de encontrar esta opção em man script :

-f      Flush output after each write. This is nice for telecooperation:
        One person does ‘mkfifo foo; script -f foo’ and another can
        supervise real-time what is being done using ‘cat foo’.

Eu ainda não joguei com isso, mas parece exatamente o que eu estava procurando. Brincar com ele pode estabelecer se a cor, etc., é transmitida também.

    
por 21.09.2017 / 02:43
4

Muitas pessoas sugeriram screen . A tela é um pouco antiga e muito ruim. Sugiro tmux .

Para criar uma sessão, basta executar tmux new -s <name>

Em seguida, para que outra pessoa se conecte a essa sessão, tudo o que precisa fazer é executar tmux a -t <name> , certificando-se de manter o mesmo nome.

Deixar uma sessão pode ser feito pressionando Ctrl - b e então d .

Note que tudo isso deve ser feito no mesmo servidor / máquina.

    
por 21.08.2016 / 22:17
1

Você pode usar tee para canalizar sua saída para o terminal da outra pessoa se você souber qual terminal está usando.

Você pode usar o comando w para descobrir o terminal:

user4@myubuntu:~$ w
 16:41:36 up 13 min,  4 users,  load average: 0.55, 0.60, 0.46
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user1    :0       :0               16:28   ?xdm?   6:28   0.03s gdm-session-worker [pam/gdm-password]
user2    pts/1    :0               16:38    2:46   0.04s  0.04s bash
user3    pts/7    :0               16:38    1:32   0.09s  0.09s bash
user4    pts/8    :0               16:41    4.00s  0.05s  0.00s w

Eu sou user4 no terminal pts/8 . Se eu quiser enviar minha saída para user2 no terminal pts/1 , use o seguinte comando para iniciar um novo shell:

$ bash | tee /dev/pts/1

Em seguida, toda a saída dos meus comandos subseqüentes (não inseridos) será copiada para o terminal de user2 . Se estiver pronto, basta pressionar Ctrl-D para finalizar o shell.

Se você quiser enviar apenas uma mensagem ou algum texto para o outro usuário, use o comando write :

$ write <username>
hello, are you there ? 
Ctrl-d
    
por 13.08.2016 / 06:48
1

Existe o comando screen . Eu acho que isso é exatamente o que você está procurando. link

A informação importante para você é que mais de um usuário pode se conectar à mesma tela

    
por 13.08.2016 / 09:22
0

Ok, compartilhar uma tela com screen é possível, mas mais interessante do que eu pensava.

  1. Requer screen para ser setuid para root, para que possa acessar o soquetes de outros usuários. (Pode-se pensar que isso poderia ser feito para trabalhar com apenas setgid, mas eu não verifiquei se screen pode ser compilado dessa forma.)
  2. A documentação dos comandos multiusuário é um pouco sobre o lado da luz, o que significa que configurar isso não é tão simples assim. Além disso, embora você possa definir ACLs para outros usuários, parece não existir uma opção para imprimir as ACLs atuais.

Dito isso, pude fazer com que funcionasse, por alguns valores de "trabalho".

Primeiro, verifique se ele tem privilégio suficiente e corrija as permissões em /var/run/screen :

chmod u+s /usr/bin/screen
chmod 755 /var/run/screen

Em seguida, inclua alguns comandos de configuração em um arquivo:

$ cat shared.screen.rc
multiuser on
aclumask ?-wx
aclumask ??-wx
addacl foo
aclchg foo -x ?
aclchg foo +x detach,help,next,prev,windows,info,select

multiuser ativa o modo multiusuário, aclumask limita o acesso padrão para todos os usuários e, em seguida, addacl permite (todos) acesso ao usuário foo . Os comandos aclchg removem o acesso execute ( -x ) a todos os comandos ( ? ) e, em seguida, permitimos alguns comandos benignos novamente.

Em seguida, a execução de screen -c shared.screen.rc cria uma tela à qual o usuário foo pode se conectar:

foo$ screen -ls bar/
There is a suitable screen on:
        18839.pts-2.test        (08/21/16 22:09:07)     (Multi, detached)
foo$ screen -r bar/

Escrever na tela e usar a maioria dos comandos resulta em um erro. No entanto, o modo de cópia parece funcionar. Além disso, a tela inicial com screen -rd bar/ como o usuário não proprietário expulsa o usuário proprietário, mesmo que você imagine que isso não seja possível. screen -RRD também funciona e efetua logout do usuário original. Mesmo que você possa desaprovar pow_detach e detach (o que deve ser divertido para o segundo usuário), isso não parece afetar isso. Divertido.

É claro que, se você não se importa e fica feliz em permitir que outros usuários mexam com sua tela, usar multiuser on e addacl foo deve ser suficiente. Não que eu esteja dizendo que você deveria.

    
por 21.08.2016 / 21:35
0

Eu acho wemux e tmux é o que você está procurando.

    
por 19.10.2017 / 22:52