J'utilise ici des documents dans un script bash pour automatiser l'installation et la configuration où un mot de passe est requis plusieurs fois. J'entre une fois le mot de passe et le script le passe aux différentes commandes. Dans la plupart des cas, l'approche ici-document gère cette amende. Cependant, dans un cas, j'obtiens cette erreur:
Enter VNC password: stty: standard input: Inappropriate ioctl for device
Verify password:
stty: standard input: Inappropriate ioctl for device
Veuillez noter que ce message d'erreur vient de x11vnc -storepassword
(pas de sudo
.)
Mon problème est lié à x11vnc -storepasswd
et voici mon code:
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC
Cela évidemment (de l'erreur) ne fonctionne pas. J'apprécierais un exemple de travail de mise sudo x11vnc -storepasswd ~/.vnc/passwd
en œuvre dans un script.
Au cas où cela aiderait, les invites ressemblent à ceci:
Entrez le mot de passe VNC:
Vérifiez le mot de passe:
Écrivez le mot de passe dans /home/user/.vnc/passwd? [y] / nn
L'utilisation expect
sera-t-elle une meilleure solution? Si oui, comment l'utiliser dans ce cas? (Je n'ai jamais utilisé expect
auparavant, mais j'ai examiné de nombreux exemples depuis la publication de cette question et je ne peux pas expect
travailler seul.)
la source
sudo
elle vientx11vnc -storepassword
. J'ai essayé différentesexpect
approches et je n'arrive pas à faire les choses correctement. Un exemple d'utilisationexpect
de la saisie d'un mot de passex11vnc -storepassword
serait grandement apprécié. Je mettrai à jour ma question pour éviter toute confusion supplémentaire.Enter VNC password: usage: send [args] string
sur la ligneexpect "password:" {send "swordfish" "\r"}
. Je ne sais pas comment résoudre ce problème. Attendre semble être un outil très difficile, car je tromper avec ce problème particulier pendant des heures sans résultats de travail pour le moment.send "swordfish" "\r"
et elle a été résolue parsend "swordfish\r"
. Cependant, la solution ne fonctionne toujours pas. Aucun mot de passe n'est écrit dans ~ / .vnc / passwd. Je ne sais toujours pas pourquoi. Comme je l'ai dit, j'ai vu ce résultat malgré tout ce que je peux penser jusqu'à présent.expect
solution fonctionnent lorsqu'elles sont entrées manuellement. Ils ne fonctionnent pas dans ceexpect
script ou toute variante de celui-ci que j'ai essayé jusqu'à présent.Une autre option pour éviter ces messages d'avertissement consiste à s'exécuter
x11vnc
dans un pseudo-terminal créé par une commande UNIX (voir Utilisation de pseudo-terminaux (pty) pour contrôler des programmes interactifs ). Cela peut être fait avec lascript
commande ou des outils tels quepdip
("Dialogue programmé avec des programmes interactifs").Les messages d'avertissement sur Mac OS X 10.6.8 pour ne pas fournir de pseudo-terminal pour
x11vnc
:Solutions utilisant la
script
commande:la source
Sudo a une option
-S
qui lui permet de lire le mot de passe depuis STDIN.Voici un exemple de script pour illustrer le processus:
Votre script aurait simplement besoin de faire quelque chose comme:
Cela vous permettrait d'utiliser les commandes sudo dans votre script sans avoir à coder en dur un mot de passe.
Alternativement, vous pouvez ajouter à votre utilisateur, ou à un sous-ensemble d'utilisateurs, la possibilité d'exécuter x11vnc avec sudo, sans mot de passe, mais en ajoutant une ligne comme celle-ci à
/etc/sudoers
:Ou créez un
vncusers
groupe, ajoutez des utilisateurs à ce groupe et ajoutez ce qui suit à/etc/sudoers
:la source
sudo
elle vientx11vnc -storepassword
.