Saya memiliki masalah berikut: Menggunakan RaspPi 3B yang menjalankan Raspbian Jessie (versi 4.4.26-v7 +) Saya ingin GUI skrip python yang ditulis sendiri untuk dijalankan pada startup.
Saya tahu bahwa pertanyaan ini telah diajukan di situs web ini dan juga pada orang lain, tetapi karena Raspbian terus berubah dan tidak ada solusi yang disarankan sebelum bekerja untuk saya (lihat di bawah), saya ingin menanyakannya lagi.
Dari pemahaman saya, saya perlu memuat XServer dan menjalankan skrip saya setelahnya. Ini seharusnya terjadi alih-alih memuat seluruh desktop.
Salah satu cara untuk mencapai ini seharusnya melalui file autostart LXDE (seperti yang dijabarkan dalam jawaban ini ). Saya mengedit file /etc/xdg/lxsession/LXDE-pi/autostart
serta file /etc/xdg/lxsession/LXDE/autostart
(yang pertama berisi empat baris, bukan tiga seperti yang disarankan dalam posting yang dirujuk) - menambahkan baris @sudo python /full/path/to/file.py
dan @openbox
, tetapi Pi saya masih boot ke desktop dan tidak secara otomatis menjalankan skrip sama sekali. Anotasi: Saya mencoba hanya baris skrip dan baris skrip bersama dengan baris openbox untuk salah satu file dan untuk kedua file bersamaan.
Strategi lain melibatkan file rc.local (seperti yang disarankan dalam dokumentasi resmi ). Namun, hanya menambahkan python /full/path/to/file.py &
tidak berfungsi (karena masih ada GUI saya hilang) dan menambahkan lebih lanjut startx
tidak membantu karena saya tampaknya tidak dapat menghubungkan startx dengan skrip python dan karena itu ditutup segera setelah dimulai.
Beberapa menyarankan , bahwa (tambahan) .xinitrc harus digunakan. Namun, ini tidak berhasil:
su -c python /full/path/to/file.py pi
Dan, last but not least, dalam beberapa hal, itu harus bisa dilakukan menggunakan init.d - tapi saya belum menemukan detail tentang ini, belum.
Saya akan sangat menghargai setiap petunjuk menuju arah yang benar. Di mana kesalahan saya? Bagaimana seharusnya baris saya di rc.local atau .xinitrc? Atau apakah ada perubahan besar terkait dengan beralih ke piksel dan saya harus mencoba yang lain?
Beberapa informasi tambahan: Skrip membutuhkan hak sudo. Itu ditulis dalam Python 2.7, GUI menggunakan Tkinter. GUI mengisi layar sepenuhnya, sehingga latar belakang tidak relevan. Script seharusnya dijalankan selamanya (atau sampai dihentikan oleh input pengguna melalui GUI) dan menggunakan layanan sistem seperti wifi dan ethernet.
Informasi lebih lanjut: Semua terjadi secara lokal.
Klarifikasi: Sekarang saya menghabiskan lebih dari 8 jam mencari di internet, mencoba tutorial dari titik awal yang berbeda atau menggabungkannya. Saya sampai pada kesimpulan, bahwa skrip saya (yang berfungsi sempurna saat dimulai dalam piksel) tidak berfungsi jika dijalankan di lingkungan non-desktop (yang saya ragu) atau bahwa tutorial baru diperlukan, karena perubahan Oktober 2016 ke Raspbian membuat tutorial yang lebih lama menjadi usang. Lebih jauh, tantangannya terletak bukan pada memulai skrip atau memulai Xserver (atau yang serupa) secara independen satu sama lain, tetapi dalam melakukan keduanya yang ditautkan sehingga skrip akan menggunakan tampilan yang dibuat oleh Xserver.
Jawaban:
Selama sebulan terakhir ini pada dasarnya saya telah mengerjakan hal yang persis sama, jadi saya telah meneliti bagaimana melakukan ini banyak dan tahu bagaimana melakukannya dengan versi terbaru dari Raspbian (PIXEL).
nodm
adalah manajer tampilan minimal yang mem-bypass pemuatan LXDE, danopenbox
(yang sudah diinstal pada Pi) menyediakan manajer sesi minimal dan bekerja dengan X server.Untuk mengatur lingkungan ini di Raspbian, instal
nodm
denganapt-get
dan edit file/etc/default/nodm
. Anda perlu mengatur opsiNODM_ENABLED
ketrue
danNODM_USER
kepi
(atau apa pun nama pengguna Anda).Kemudian buat file Xsession khusus di folder rumah Anda (
/home/pi/.xsession
) dengan konten berikut (while
loop tidak diperlukan, itu hanya secara otomatis me-restart skrip Python jika crash):dan ini semua yang perlu saya pikir. Saya menulis skrip Bash untuk mengatur ini secara otomatis:
Catatan:
nodm
Anda perlu untuk menginstalxserver-xorg
,xinit
,openbox
, dan setiap dependensi lainnya naskah Anda memiliki. Kemudian jika Anda menggunakan Openbox, alih-alih menjalankan skrip Python di file Xsession, bagian dari kode yang menjalankannya perlu dipindahkan ke skrip terpisah (/home/pi/.config/openbox/autostart
). Saya bisa menguraikan lebih lanjut tentang cara melakukan ini jika diinginkan.sumber
File autostart ada di beberapa tempat berbeda. Ini hanyalah masalah mengedit file autostart yang tepat di jalur yang benar. Saya mencoba mengedit
/home/pi/.config/lxsession/LXDE-pi/autostart
. Akhirnya itu berhasil bagi saya./etc/xdg/lxsession/LXDE-pi/autostart
tampaknya jalan yang salah.sumber
The kotor trik yang saya gunakan di RPI di masa lalu adalah untuk menempatkan perintah dalam saya
/etc/rc.local
berkas sebelumexit 0
line. Dalam kasus Anda, saya akan mencoba baris berikut dan reboot.Seperti yang telah Anda nyatakan bahwa diperlukan izin tingkat sudo, Anda mungkin harus menyesuaikan
su
perintah yang sebelumnya Anda coba karena saat ini sepertinya Anda mencoba menjalankannya di bawahpi
pengguna.Satu peringatan tentang saran saya untuk penggunaan file rc.local, jika skrip Anda keluar dengan status bukan nol Anda tidak akan menyelesaikan booting agar lebih aman selama pengujian, Anda dapat mencoba yang berikut untuk keluar keluar masih sama dengan 0
Suntingan dan pembaruan
Melihat melalui beberapa data pencarian, menemukan instruksi yang menunjukkan menggunakan skrip peluncur direferensikan di tab cron untuk memfasilitasi memuat skrip python. Mungkin kelihatannya akan memuat cron untuk memuat skrip sh / bash untuk memuat python tapi ... itu berbelit-belit sehingga cukup masuk akal.
sumber
Jadi tergantung pada input apa yang dibutuhkan kode Anda, solusi ini dapat berfungsi.
Hal pertama yang saya lakukan adalah membuat skrip di direktori / saya yang berbunyi seperti ini:
Anda harus membuat runnable dengan itu
chmod -x scriptName.sh
.Kemudian lakukan
crontab -e
di terminal dan tambahkan@reboot sudo bash /scriptName.sh
Tetapkan opsi boot Anda ke CLI dan Anda harus siap! Ini bekerja pada 3B saya menjalankan Raspbian.
Satu peringatan, jika Anda menggunakan layar sentuh untuk kios / layar saya, saya belum mengetahuinya. Ini akan bekerja dengan baik dengan input mouse tetapi untuk input sentuh, setidaknya untuk layar yang saya coba gunakan, itu akan dimatikan dengan cara yang membuatnya tidak dapat digunakan.
Catatan : Jika kode Anda melakukan file IO seperti milik saya, Anda harus menggunakan
cd
untuk menavigasi ke lokasi kode Anda di skrip peluncur Anda atau python akan menganggap lokasinya adalah skrip Anda dan akan melakukan file IO yang sesuai.sumber