Estou usando documentos aqui em um script bash para automatizar a instalação e a configuração em que uma senha é necessária várias vezes. Eu digito a senha uma vez e o script a transmite aos vários comandos. Na maioria dos casos, a abordagem do documento aqui lida com isso. No entanto, em um caso, recebo este erro:
Enter VNC password: stty: standard input: Inappropriate ioctl for device
Verify password:
stty: standard input: Inappropriate ioctl for device
Observe que esta mensagem de erro é de x11vnc -storepassword
(não desudo
.)
Meu problema está relacionado x11vnc -storepasswd
e aqui está o meu código:
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC
Isso obviamente (do erro) não funciona. Eu apreciaria um exemplo de trabalho de como implementarsudo x11vnc -storepasswd ~/.vnc/passwd
em um script.
Caso isso ajude, os prompts ficam assim:
Digite a senha do VNC:
Verifique a senha:
Escreva a senha em /home/user/.vnc/passwd? [y] / nn
Usar expect
será uma solução melhor? Se sim, como eu o usaria neste caso? (Eu nunca usei expect
antes, mas observei muitos exemplos desde a publicação desta pergunta e não consigo expect
trabalhar por conta própria.)
fonte
sudo
, está vindox11vnc -storepassword
. Eu tenho tentado váriasexpect
abordagens e não consigo acertar. Um exemplo usandoexpect
para digitar uma senhax11vnc -storepassword
seria muito apreciado. Vou atualizar minha pergunta para evitar mais confusão.Enter VNC password: usage: send [args] string
na linhaexpect "password:" {send "swordfish" "\r"}
. Não sei como consertar isso. Esperar parece ser uma ferramenta muito exigente, porque eu tenho brincado com esse problema em particular por horas sem resultados de trabalho ainda.send "swordfish" "\r"
e foi resolvido porsend "swordfish\r"
. No entanto, a solução ainda não funciona. Nenhuma senha é gravada em ~ / .vnc / passwd. Ainda estou sem noção do porquê. Como eu disse, tenho visto esse resultado apesar de tentar tudo o que consigo pensar até agora.expect
solução funcionam quando inseridos manualmente. Eles não funcionam nesteexpect
script ou em nenhuma variação dele que eu tentei até agora.Outra opção para evitar essas mensagens de aviso é executar
x11vnc
em um pseudo-terminal criado por um comando UNIX (consulte Usando pseudo-terminais (pty) para controlar programas interativos ). Isso pode ser feito com oscript
comando ou ferramentas comopdip
("Diálogo Programado com Programas Interativos").As mensagens de aviso no Mac OS X 10.6.8 por não fornecer um pseudo-terminal para
x11vnc
:Soluções usando o
script
comando:fonte
O Sudo tem uma opção
-S
que permite ler a senha do STDIN.Aqui está um exemplo de script para demonstrar o processo:
Seu script precisaria simplesmente fazer algo como:
Isso permitiria que você usasse comandos sudo no seu script sem precisar codificar uma senha.
Como alternativa, você pode adicionar seu usuário, ou um subconjunto de usuários, a capacidade de executar x11vnc com sudo, sem uma senha, mas adicionando uma linha como esta para
/etc/sudoers
:Ou crie um
vncusers
grupo, adicione usuários a esse grupo e adicione o seguinte a/etc/sudoers
:fonte
sudo
, está vindox11vnc -storepassword
.