Menjalankan program startup di terminal dengan sudo

8

Saya perlu menjalankan skrip python di terminal, myscript.py saat startup (di Lubunt). Script ini membutuhkan root.

Saya telah menyiapkan .desktopfile yang menjalankan perintah berikut:

lxterminal --command="python /home/d/Jarvis/alarm.py && /bin/bash"

Jendela terminal terbuka saat startup dan menjalankan skrip, tetapi kemudian ditutup ketika skrip Python mengembalikan kesalahan (karena itu tidak dijalankan sebagai root). Ketika saya mengubah Exec=ini ...

lxterminal --command="sudo python /home/d/Jarvis/alarm.py && /bin/bash"

... (perintah awalan dengan sudo) yang berfungsi. Namun , terminal terbuka saat startup dan menampilkan

[sudo] password for d: \

prompt, mengharuskan saya untuk memasukkan kata sandi. Saya ingin eksekusi skrip python saat startup sepenuhnya otomatis tanpa interaksi pengguna.

Bagaimana saya bisa mencapai ini?

Brandon
sumber

Jawaban:

5

Jika Anda menginginkannya saat login dan bukan startup (karena saya tidak melihat bagaimana LXTerminal dapat dibuka tanpa X server dinyalakan), Anda harus menambahkan pengecualian ke file / etc / sudoers sehingga Anda tidak akan diminta untuk kata sandi Anda.

Untuk melakukan ini, jalankan sudo visudodan kemudian tambahkan berikut ini:

<your username> ALL = NOPASSWD: /home/d/Jarvis/alarm.py

Pastikan Anda menambahkan ini di akhir file agar ini berfungsi. Saya juga akan mengatur izin alarm.pyuntuk dieksekusi agar ini berfungsi. Jadi, lakukan ini untuk menjadikannya sebagai executable:

chmod +x /home/d/Jarvis/alarm.py

Semoga ini bisa membantu!

kroq-gar78
sumber
Ini bekerja! Terima kasih banyak! Saya masih memiliki satu masalah ... Ketika saya menjalankan "alarm.py" alih-alih "python alarm.py", saya mendapatkan kesalahan 'impor: tidak ditemukan' untuk modul inti python (mis. Datetime). Saya tidak berpikir saya dapat menyalin modul-modul itu ke / Jarvis /, jadi apa yang harus saya lakukan?
Brandon
@Brandon Anda mungkin harus mengatur PYTHONPATHvariabel, tetapi ini hanya dugaan. Untuk ini, saya akan membuat script yang disebut 'alarm_starter.sh' dengan isi sebagai berikut: PYTHONPATH={what ever it should be} sudo /home/d/Jarvis/alarm.py. Saya benar-benar tidak yakin tentang ini. Mungkin ini akan membantu: docs.python.org/tutorial/modules.html#the-module-search-path
kroq-gar78
9

Skrip khusus yang dijalankan saat startup sebagai root dapat dijalankan melalui rc.local.

Edit /etc/rc.localdengan hak root:

sudo nano /etc/rc.local

dan menempatkan garis

python /home/d/Jarvis/alarm.py

tepat sebelum baris terakhir, yang seharusnya mengatakan exit 0. Reboot untuk melihat apakah itu berhasil.

phoibos
sumber
Ini memecahkan masalah saya untuk program autostarting pada Raspbian.
Daniel Harris