Ich verwende Here-Dokumente in einem Bash-Skript, um die Installation und Einrichtung zu automatisieren, bei denen häufig ein Kennwort erforderlich ist. Ich gebe das Passwort einmal ein und das Skript gibt es an die verschiedenen Befehle weiter. In den meisten Fällen wird dies durch den hier beschriebenen Ansatz erledigt. In einem Fall erhalte ich jedoch den folgenden Fehler:
Enter VNC password: stty: standard input: Inappropriate ioctl for device
Verify password:
stty: standard input: Inappropriate ioctl for device
Bitte beachten Sie, dass diese Fehlermeldung von x11vnc -storepassword
(nicht von sudo
) stammt.
Mein Problem ist verbunden mit x11vnc -storepasswd
und hier ist mein Code:
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC
Das geht natürlich (aus dem Fehler) nicht. Ich würde mich über ein funktionierendes Beispiel für die Implementierung sudo x11vnc -storepasswd ~/.vnc/passwd
in ein Skript freuen.
Falls es hilft, sehen die Eingabeaufforderungen folgendermaßen aus:
Geben Sie das VNC-Passwort ein:
Passwort bestätigen:
Schreiben Sie ein Passwort an /home/user/.vnc/passwd? [y] / nn
Wird die Verwendung expect
eine bessere Lösung sein? Wenn ja, wie würde ich es in diesem Fall verwenden? (Ich habe es noch nie benutzt, expect
aber ich habe mir seit dem Posten dieser Frage viele Beispiele angesehen, und ich kann nicht expect
alleine arbeiten.)
quelle
sudo
dortx11vnc -storepassword
. Ich habe verschiedeneexpect
Ansätze ausprobiert und ich kann es nicht richtig machen. Ein Beispielexpect
für die Eingabe eines Passwortsx11vnc -storepassword
wäre sehr dankbar. Ich werde meine Frage aktualisieren, um weitere Verwirrung zu vermeiden.Enter VNC password: usage: send [args] string
in der Leitungexpect "password:" {send "swordfish" "\r"}
. Ich bin mir nicht sicher, wie ich das beheben soll. Expect scheint ein sehr wählerisches Tool zu sein, da ich mich stundenlang mit diesem speziellen Problem herumgetrieben habe, ohne dass es funktioniert hat.send "swordfish" "\r"
und wurde von behobensend "swordfish\r"
. Die Lösung funktioniert jedoch immer noch nicht. In ~ / .vnc / passwd wird kein Passwort geschrieben. Ich weiß immer noch nicht warum. Wie gesagt, ich habe dieses Ergebnis gesehen, obwohl ich alles versucht habe, was mir bisher einfiel.expect
funktionieren dieselben Befehle, die in Ihrer Lösung verwendet werden, wenn sie manuell eingegeben werden. Sie funktionieren nicht in diesemexpect
Skript oder einer Variation davon, die ich bisher ausprobiert habe.Eine andere Möglichkeit, diese Warnmeldungen zu vermeiden, besteht darin, sie
x11vnc
in einem Pseudo-Terminal auszuführen, das mit einem UNIX-Befehl erstellt wurde (siehe Verwenden von Pseudo-Terminals (pty) zur Steuerung interaktiver Programme ). Dies kann mit demscript
Befehl oder Tools wiepdip
("Programmierter Dialog mit interaktiven Programmen") erfolgen.Die Warnmeldungen unter Mac OS X 10.6.8 für die Nichtbereitstellung eines Pseudoterminals für
x11vnc
:Lösungen mit dem
script
Befehl:quelle
Sudo hat eine Option
-S
, mit der es das Passwort von STDIN lesen kann.Hier ist ein Beispielskript, um den Prozess zu demonstrieren:
Ihr Skript müsste einfach so etwas tun:
Auf diese Weise können Sie sudo-Befehle in Ihrem Skript verwenden, ohne ein Kennwort fest codieren zu müssen.
Alternativ können Sie Ihrem Benutzer oder einer Untergruppe von Benutzern die Möglichkeit hinzufügen, x11vnc mit sudo ohne Kennwort auszuführen. Fügen Sie jedoch eine Zeile wie die folgende hinzu
/etc/sudoers
:Oder erstellen Sie eine
vncusers
Gruppe, fügen Sie dieser Gruppe Benutzer hinzu und fügen Sie Folgendes hinzu zu/etc/sudoers
:quelle
sudo
dortx11vnc -storepassword
.