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].d
direktori - yang sesuai dengan 7 runlevel. Anda ingin menggunakan salah satu yang tidak memulai login grafis ( lightdm
) atau yang lain untuk menghapus lightdm
dari 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 fvwm
masih bagus, metode khususnya untuk hal semacam ini, jadi ingatlah jika Anda melakukannya), karena .xinitrc
seperti 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.local
sebagai 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 .xinitrc
skrip 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 startx
alih-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, shutdown
tidak 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 shutdown
xinitrc 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 .xinitrc
konsep 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).
/etc/inittab
tetapi kebanyakan orang lain tidak lagi, apa yang mereka gunakan?