Bagaimana cara mengatur mode "kios" di Raspbian?

10

Saya ingin mengatur Raspberry Pi saya dalam semacam mode "kios" di mana ia boot menjadi satu aplikasi layar penuh. Saya tahu jalan saya di sekitar baris perintah, tetapi saya seorang pemula ketika datang untuk menyesuaikan perilaku boot linux. Saya sedang membangun aplikasi dan berencana untuk menambahkan kemampuan untuk mematikan Raspberry Pi dengan aman. Apa yang harus saya lakukan untuk mengkonfigurasi Raspberry Pi saya hanya menjalankan aplikasi yang satu ini?

Pembaruan: Agar jelas, saya tidak ingin membuka halaman web . Saya juga tidak ingin mengubah sistem operasi. Saya ingin belajar cara mengkonfigurasi sistem operasi saya (Raspbian) untuk meluncurkan aplikasi saya sendiri, bukan X (meskipun aplikasi saya mungkin tergantung pada rendering X di latar belakang).

Andrew
sumber

Jawaban:

7

Saya belum pernah mencoba ini, tetapi karena sepertinya Anda masih mencari dan belum mendapatkan jawaban dalam hampir sebulan, saya akan memberi tahu Anda di mana saya mulai.

Ini bagaimana-untuk kuno, tapi garis besar umum tampaknya suara. Anda tidak harus melakukan semuanya persis sama. Itu memang fokus menggunakan browser web sebagai pusatnya tetapi itu sebagian besar tidak relevan di sini (yaitu, santai, itu bukan "web-kios" lain).

Ini mengacu pada /etc/inittab, yang kebanyakan distro linux tidak digunakan lagi, tetapi kebetulan debian wheezy (raspbian) tidak. Idenya adalah Anda akan menggunakan runlevel 4 sebagai kios dan menjadikannya default. Anda dapat melakukan itu atau hanya menggunakan apa pun yang saat ini default (2 atau 3, saya pikir). Raspbian yang saya jalankan saat ini telah dimodifikasi oleh saya, jadi saya tidak yakin apa perbedaan asli antara /etc/rc[N].ddirektori - yang sesuai dengan 7 runlevel. Anda ingin menggunakan salah satu yang tidak memulai login grafis ( lightdm) atau yang lain untuk menghapus lightdmdari runlevel itu. Anda mungkin melakukan hal semacam itu dengan cara yang benar (lihat man update-rc.d).

Kemudian, mengikuti bagian ini dari caranya, Anda ingin membuat skrip layanan boot Anda sendiri (alias. Init) untuk memulai X dan aplikasi Anda tanpa login. Namun, jangan lakukan dengan cara itu; Anda harus menyesuaikan diri dengan debian, jadi lihatlah /etc/init.d/README. Juga, Anda tidak harus menggunakan window manager sama sekali (walaupun fvwmmasih bagus, metode khususnya untuk hal semacam ini, jadi ingatlah jika Anda melakukannya), karena .xinitrcseperti ini:

#!/bin/sh

myApp

Akan menjalankan hanya aplikasi Anda di X polos - yang sangat sangat sederhana: tidak ada menu, tidak ada titlebars, tidak ada toolbar, dll, atau cara bagi pengguna untuk memulai aplikasi lain atau mendapatkan shell. Itu hanya menyediakan kursor.

Masalah dengan ini adalah bahwa jika Anda langsung pergi ke desktop dari boot, itu akan menjadi desktop superuser. Sebenarnya, instance X selalu memiliki uid 0, tetapi aplikasi dijalankan dari run xinitrc sebagai pengguna yang menjalankan X - dalam hal ini X dimulai oleh init, sehingga pengguna akan menjadi root (walaupun secara teknis root tidak masuk log ). Maka xinitrc di atas akan lebih baik dengan:

su -c myApp pi

Yang akan menjalankan aplikasi Anda sebagai pengguna pi (yang secara teknis juga tidak masuk).

Karena secara teknis tidak ada yang login, bahkan jika pengguna kios membunuh X (mis. Via ctrl-alt-delete) mereka hanya akan dibiarkan pada prompt login. Cara melakukan lebih dari itu sehingga skrip init layanan mulai X (lihat CATATAN di bawah) di latar depan sehingga ketika keluar, skrip layanan berlanjut dan berjalan shutdown -r now.

Ingatlah bahwa seseorang yang memiliki akses fisik ke mesin (normal) selalu dapat menghindari keamanan apa pun yang Anda terapkan, jadi semua yang benar-benar Anda coba lakukan di sini tidak membuatnya terlalu mudah dan untuk mencegah kecelakaan buruk.

Juga ingat bahwa karena layanan boot Anda akan melakukan ini di latar depan, tidak ada layanan lain akan berjalan setelah itu , jadi pastikan itu adalah yang terakhir mutlak. Sangat penting! Anda bisa, pada kenyataannya, menggunakan /etc/rc.localsebagai gantinya, karena itu biasanya dijamin menjadi yang terakhir;) Itu akan menghemat waktu Anda.

CATATAN: Sebenarnya dalam skrip bagaimana-untuk itu adalah yang lain /root/kiosk, dari bagian ini . Perhatikan itu hanya satu baris yang mereferensikan .xinitrcskrip yang ditunjukkan pada bagian di atas (3.4). Masukkan saja baris seperti itu di skrip boot Anda secara langsung. Xinitrc (awal) Anda, seperti yang sudah dijelaskan, akan jauh lebih sederhana.


Sebuah Alternatif untuk Tetap Terdepan dengan ...

Tujuan dari meninggalkan permintaan X foregrounded adalah hanya untuk memblokir eksekusi skrip init sampai X keluar, sehingga baris berikutnya dalam skrip ( shutdown) akan berjalan:

startx
shutdown -r now

Di sini saya telah menggunakan startxalih-alih garis cara /usr/X11R6/bin/xinit /root/kiosk.xinitrc ..... Ini akan digunakan $HOME/.xinitrc, dan $ HOME akan menjadi /root. Cukup yakin startx juga merupakan panggilan pemblokiran, jadi sampai X keluar, shutdowntidak akan berjalan. Jika sebaliknya Anda melakukan ini:

startx &
shutdown -r now

X akan berjalan, tetapi kemudian shutdown akan berjalan juga, segera (jelas tidak ada gunanya).

Anda tidak harus menggunakan trik itu jika Anda tidak peduli tentang shutdown yang masuk - seperti yang disebutkan pengguna hanya akan berakhir dengan prompt login. Tapi itu sepertinya ide yang berguna, sejak saat itu kamu bisa mematikannya ctrl-alt-backspace. Gagasan lain, jika aplikasi Anda dekat, akan digunakan startx &dalam skrip init, yang latar belakangnya dan memungkinkan init untuk melanjutkan secara normal (ini baik-baik saja; X masih akan berjalan dan memiliki kontrol layar - "latar belakang" adalah mungkin istilah yang membingungkan). Alih-alih di skrip init, masukkan shutdownxinitrc sebagai gantinya:

#!/bin/sh
#/root/.xinitrc

su -c myApp pi
shutdown -r now

Trik yang sama, tempat yang berbeda. Sekarang ketika seseorang menutup myApp, shutdown akan terjadi (tetapi jika mereka membunuh X, itu tidak akan). Anda juga dapat melakukannya dengan dua cara, tetapi saya sebenarnya lebih menyukai yang ini karena itu berarti Anda dapat keluar dari X dan mendapatkan login, yang kadang-kadang mungkin berguna, dan Anda juga dapat dengan mudah mematikan sistem dari GUI.

Jangan background ( &) myApp di .xinitrc bahkan jika tidak ada shutdown setelah itu, karena ketika .xinitrc dilakukan X keluar;) Panggilan terakhir harus tetap ada di latar depan (biasanya, itu adalah DE atau jendela Pengelola).

Skrip init dan .xinitrckonsep serupa. Salah satunya dijalankan oleh init, yaitu proses 1 di linux (itu satu-satunya proses yang dimulai oleh kernel). Yang lain dijalankan oleh server X. Perhatikan bahwa ada file .xinitrc dan perintah xinitrc (keduanya terkait tetapi tidak sama).

goldilocks
sumber
Jika Raspbian menggunakan /etc/inittabtetapi kebanyakan orang lain tidak lagi, apa yang mereka gunakan?
Andrew
Jadi jika saya ingin memperbolehkan akses ssh saat aplikasi saya berjalan di latar depan, saya perlu memastikan .xinitrcskrip saya berjalan setelah itu, benar?
Andrew
Debian menggunakan sistem init "sysV", dan inittabmerupakan bagian dari semua itu. Daemon init yang lebih umum sekarang adalah systemddan upstart.
goldilocks
WRT aplikasi Anda berjalan di latar depan, ini hanya karena (sysV) initmenunggu scipts untuk kembali sebelum memulai yang berikutnya. Jadi biasanya dalam skrip init, jika Anda memulai layanan persisten, Anda latar belakang (alias fork) melalui &. Kemudian skrip itu sendiri keluar, tetapi proses "latar belakang" berlanjut. "Backgrounding" hanya mengacu pada rangkaian eksekusi, bukan sesuatu tentang apa yang muncul di layar - Anda dapat melatarbelakangi permohonan X Anda ( lightdmharus dilatar belakangi) ... Saya akan mengedit sesuatu tentang ini.
goldilocks
WRT ssh, sshlayanan (tertaut dalam /etc/rc[N].d) harus dimulai sebelum Anda, sehingga akan berjalan ("di latar belakang") untuk menjawab koneksi. Ini masih merupakan sistem multi-tasking;)
goldilocks
2

Lihatlah proyek 'Digital Signage' ini. Boot ke GUI kemudian membuka browser yang didukung HTML5. Saya belum mencoba tetapi saya ingin. Mungkin Anda dapat menempatkan aplikasi Anda sebagai gantinya browser untuk boot layar penuh.

http://www.binaryemotions.com/raspberry-digital-signage/

gurcanozturk
sumber
Terima kasih atas jawaban Anda, tetapi itu terlihat seperti pengganti Raspbian yang dikonfigurasi untuk menampilkan browser. Saya ingin mempelajari langkah-langkah untuk mengkonfigurasi Raspbian seperti yang saya inginkan.
Andrew
Tidak disebutkan tentang Raspbian di pertanyaan Anda. Coba ini. pikiosk.tumblr.com/post/38721623944/…
gurcanozturk
0

Mentioned Raspberry Digital Signage adalah sistem operasi yang menampilkan tampilan layar penuh terbatas pada halaman web atau daftar putar slideshow / video yang ditentukan tanpa cara untuk melarikan diri selain me-reboot mesin.

Ini sebenarnya bisa menampilkan tampilan web (tampilan halaman HTML / HTML5) dan tampilan multimedia (tampilan slide gambar dan pemutar video). Tampilan web memiliki tiga kemungkinan sub-tampilan yang berbeda: Firefox, Chromium, dan Midori (dengan dukungan Gnash).

Pengalaman Chrome dan Midori adalah fitur versi 2.0.

Emosi Biner
sumber