Saya menggunakan di sini-dokumen dalam skrip bash untuk mengotomatiskan instalasi dan pengaturan di mana kata sandi diperlukan berkali-kali. Saya memasukkan kata sandi sekali dan skrip meneruskannya ke berbagai perintah. Dalam kebanyakan kasus, pendekatan dokumen di sini menangani masalah ini. Namun, dalam satu kasus saya mendapatkan kesalahan ini:
Enter VNC password: stty: standard input: Inappropriate ioctl for device
Verify password:
stty: standard input: Inappropriate ioctl for device
Harap perhatikan bahwa pesan kesalahan ini berasal dari x11vnc -storepassword
(bukan dari sudo
.)
Masalah saya terkait dengan x11vnc -storepasswd
dan ini kode saya:
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC
Itu jelas (dari kesalahan) tidak berfungsi. Saya akan menghargai contoh kerja tentang cara menerapkan sudo x11vnc -storepasswd ~/.vnc/passwd
dalam skrip.
Jika itu membantu, petunjuknya terlihat seperti ini:
Masukkan kata sandi VNC:
Verifikasi kata sandi:
Tulis kata sandi ke /home/user/.vnc/passwd? [y] / nn
Apakah menggunakan expect
menjadi solusi yang lebih baik? Jika demikian, bagaimana saya menggunakannya dalam kasus ini? (Saya belum pernah menggunakan expect
sebelumnya tetapi saya telah melihat banyak contoh sejak memposting pertanyaan ini dan saya tidak bisa expect
bekerja sendiri.)
sumber
sudo
itu berasal darix11vnc -storepassword
. Saya telah mencoba berbagaiexpect
pendekatan dan sepertinya saya tidak bisa melakukannya dengan benar. Contoh menggunakanexpect
untuk memasukkan kata sandix11vnc -storepassword
akan sangat dihargai. Saya akan memperbarui pertanyaan saya untuk menghindari kebingungan lebih lanjut.Enter VNC password: usage: send [args] string
di teleponexpect "password:" {send "swordfish" "\r"}
. Saya tidak yakin bagaimana cara memperbaikinya. Harapkan tampaknya menjadi alat yang sangat pemilih karena saya telah membodohi masalah khusus ini selama berjam-jam tanpa hasil yang berhasil.send "swordfish" "\r"
dan diselesaikan olehsend "swordfish\r"
. Namun, solusinya masih belum berhasil. Tidak ada kata sandi yang ditulis ke ~ / .vnc / passwd. Saya masih tidak mengerti mengapa. Seperti yang saya katakan, saya telah melihat hasil ini meskipun mencoba semua yang saya bisa pikirkan sejauh ini.expect
solusi Anda berfungsi saat dimasukkan secara manual. Mereka tidak bekerja dalamexpect
skrip ini atau variasi apa pun yang telah saya coba sejauh ini.Opsi lain untuk menghindari pesan-pesan peringatan tersebut adalah dengan mengeksekusi
x11vnc
di pseudo-terminal yang dibuat oleh perintah UNIX (lihat Menggunakan pseudo-terminal (pty) untuk mengontrol program interaktif ). Ini dapat dilakukan denganscript
perintah atau alat sepertipdip
("Dialog terprogram dengan Program Interaktif").Pesan peringatan pada Mac OS X 10.6.8 karena tidak menyediakan terminal semu untuk
x11vnc
:Solusi menggunakan
script
perintah:sumber
Sudo memiliki opsi
-S
yang memungkinkannya untuk membaca passwd dari STDIN.Berikut ini contoh skrip untuk menunjukkan proses:
Script Anda, hanya perlu melakukan sesuatu seperti:
Ini memungkinkan Anda untuk menggunakan perintah sudo dalam skrip Anda tanpa harus membuat hardcode kata sandi.
Sebagai alternatif, Anda dapat menambahkan pengguna Anda, atau subset pengguna, kemampuan untuk menjalankan x11vnc dengan sudo, tanpa kata sandi, tetapi menambahkan baris seperti ini ke
/etc/sudoers
:Atau buat
vncusers
grup, tambahkan pengguna ke grup itu, dan tambahkan berikut ini ke/etc/sudoers
:sumber
sudo
itu berasal darix11vnc -storepassword
.