วิธีการตั้งค่าโหมด "คีออสก์" ใน Raspbian


10

ฉันต้องการตั้งค่า Raspberry Pi ของฉันในโหมด "คีออสก์" ซึ่งมันบูทเข้ากับแอปพลิเคชั่นเต็มหน้าจอเดียว ฉันรู้ทางของฉันรอบบรรทัดคำสั่ง แต่ฉันเป็นสามเณรเมื่อมันมาถึงการปรับแต่งพฤติกรรมการบูตลินุกซ์ ฉันกำลังสร้างแอปพลิเคชันและกำลังวางแผนที่จะเพิ่มความสามารถในการปิด Raspberry Pi อย่างปลอดภัย ฉันต้องทำอะไรบ้างเพื่อกำหนดค่า Raspberry Pi ของฉันให้เรียกใช้แอปพลิเคชั่นเดียวเท่านั้น

UPDATE:ต้องมีความชัดเจนผมไม่ต้องการที่จะเปิดหน้าเว็บ ฉันไม่ต้องการเปลี่ยนระบบปฏิบัติการด้วย ฉันต้องการเรียนรู้วิธีกำหนดค่าระบบปฏิบัติการ (Raspbian) เพื่อเปิดใช้แอปพลิเคชันของตัวเองแทน X (แม้ว่าแอปพลิเคชันของฉันอาจขึ้นอยู่กับการเรนเดอร์ X ในพื้นหลัง)

คำตอบ:


7

ฉันไม่เคยลองทำเช่นนี้ แต่ดูเหมือนว่าคุณยังคงมองหาและไม่ได้รับคำตอบในรอบเกือบหนึ่งเดือนฉันจะบอกคุณว่าจะเริ่มที่ไหนดี

วิธีการนี้เป็นวิธีโบราณ แต่เค้าโครงทั่วไปดูเหมือนจะเป็นเสียง คุณไม่ต้องทำทุกอย่างเหมือนกันหมด มันมุ่งเน้นไปที่การใช้เว็บเบราว์เซอร์เป็นจุดศูนย์กลาง แต่ส่วนใหญ่ไม่เกี่ยวข้องที่นี่ (กล่าวคือผ่อนคลายมันไม่ใช่ "เว็บตู้" อื่น)

มันหมายถึง/etc/inittabซึ่ง distros linux ส่วนใหญ่ไม่ได้ใช้อีกต่อไป แต่มันเกิดขึ้นได้ว่า debian wheezy (raspbian) ทำ ความคิดคือคุณจะใช้ runlevel 4 เป็นตู้และทำให้มันเป็นค่าเริ่มต้น คุณสามารถทำสิ่งนั้นหรือเพียงแค่ใช้สิ่งที่ปัจจุบันเป็นค่าเริ่มต้น (2 หรือ 3 ฉันคิดว่า) Raspbian ที่ฉันใช้อยู่ในขณะนี้ได้รับการแก้ไขโดยฉันดังนั้นฉันไม่แน่ใจว่าความแตกต่างเดิมระหว่าง/etc/rc[N].dไดเรกทอรี - ซึ่งสอดคล้องกับ 7 runlevels คุณต้องการใช้อย่างใดอย่างหนึ่งที่ไม่ได้เริ่มต้นเข้าสู่ระบบแบบกราฟิก ( lightdm) หรืออื่น ๆ เพื่อลบออกlightdmจากระดับที่ คุณอาจทำสิ่งนั้นในแบบที่ถูกต้อง (ดูman update-rc.d)

จากนั้นทำตามส่วนของวิธีการนี้คุณต้องการสร้างสคริปต์บริการบู๊ต (aka. init) ของคุณเองเพื่อเริ่มต้น X และแอปของคุณโดยไม่ต้องลงชื่อเข้าใช้ อย่างไรก็ตามอย่าทำอย่างนั้น /etc/init.d/READMEคุณต้องการเพื่อให้สอดคล้องกับเดเบียนเพื่อดู นอกจากนี้คุณไม่จำเป็นต้องใช้ตัวจัดการหน้าต่างเลย (แม้ว่าfvwmจะยังดีอยู่ก็ตามการทำ methinks โดยเฉพาะอย่างยิ่งสำหรับสิ่งนี้ดังนั้นโปรดระลึกไว้เสมอหากคุณทำ) เพราะสิ่ง.xinitrcนี้:

#!/bin/sh

myApp

จะเรียกใช้แอปของคุณในแบบธรรมดา X ซึ่งธรรมดามาก: ไม่มีเมนูไม่มีแถบชื่อไม่มีแถบเครื่องมือ ฯลฯ หรือวิธีที่ผู้ใช้จะเริ่มแอปพลิเคชันอื่นหรือรับเชลล์ มันให้เคอร์เซอร์

มีปัญหากับเรื่องนี้คือถ้าคุณตรงไปที่เดสก์ท็อปจากการบูตนั่นจะเป็นเดสก์ท็อป superuser ที่จริงแล้วอินสแตนซ์ X มี uid เป็น 0 เสมอ แต่แอปพลิเคชันที่เรียกใช้จากการเรียกใช้ xinitrc ในฐานะผู้ใช้ที่เริ่มต้น X - ในกรณีนี้ X เริ่มต้นโดย init ดังนั้นผู้ใช้จะเป็นรูท (แม้ว่าในทางเทคนิคแล้ว ) ดังนั้น xinitrc ด้านบนจะดีกว่าด้วย:

su -c myApp pi

ซึ่งจะเรียกใช้แอปของคุณในฐานะผู้ใช้ pi แทน (ซึ่งยังไม่ได้ลงชื่อเข้าใช้ด้วย)

เนื่องจากในทางเทคนิคแล้วไม่มีใครลงชื่อเข้าใช้แม้ว่าผู้ใช้คีออสก์จะฆ่า X (เช่นผ่านctrl-alt-delete) พวกเขาจะถูกทิ้งไว้ที่พรอมต์การเข้าสู่ระบบ วิธีการนอกเหนือไปจากที่ดังกล่าวว่าสคริปต์ init บริการเริ่มต้น X (ดูหมายเหตุด้านล่าง) shutdown -r nowในเบื้องหน้าเพื่อที่ว่าเมื่อออกจากสคริปต์บริการอย่างต่อเนื่องและวิ่ง

โปรดจำไว้ว่าคนที่สามารถเข้าถึงเครื่อง (ปกติ) ทางกายภาพสามารถหลีกเลี่ยงความปลอดภัยที่คุณติดตั้งอยู่เสมอดังนั้นสิ่งที่คุณพยายามทำที่นี่จริงๆคือไม่ทำให้ง่ายเกินไปและป้องกันอุบัติเหตุที่น่ารังเกียจ

โปรดจำไว้ด้วยว่าเนื่องจากบริการการบู๊ตของคุณจะทำสิ่งนี้ในเบื้องหน้าจึงไม่มีบริการอื่นที่จะทำงานหลังจากนั้นดังนั้นตรวจสอบให้แน่ใจว่าเป็นบริการสุดท้าย สำคัญมาก! ในความเป็นจริงคุณสามารถใช้/etc/rc.localแทนเนื่องจากรับประกันได้ตามปกติว่าจะเป็น;) ที่จะช่วยให้คุณประหยัดเวลา

หมายเหตุ:จริงๆแล้วในวิธีการเป็นสคริปต์อื่น/root/kioskจากส่วนนี้ โปรดสังเกตว่าเป็นเพียงหนึ่งบรรทัดที่อ้างอิง.xinitrcสคริปต์ที่แสดงในส่วนด้านบน (3.4) เพียงใส่บรรทัดในสคริปต์บูตของคุณโดยตรง xinitrc ของคุณ (เบื้องต้น) ตามที่อธิบายไว้แล้วจะง่ายกว่ามาก


ทางเลือกสู่การอยู่เบื้องหน้าด้วย init ...

จุดประสงค์ของการออกจาก X การเรียกเบื้องหน้าคือเพื่อบล็อกการดำเนินการของสคริปต์เริ่มต้นจนกว่า X จะออกเพื่อให้บรรทัดถัดไปในสคริปต์ ( shutdown) จะทำงาน:

startx
shutdown -r now

ที่นี่ฉันใช้startxแทน/usr/X11R6/bin/xinit /root/kiosk.xinitrc ....บรรทัดวิธีการ นี้จะใช้$HOME/.xinitrcและ $ HOME /rootจะเป็น ค่อนข้างแน่ใจว่า startx นั้นเป็นสายการบล็อคด้วยเช่นกันดังนั้นจนกว่า X ออกshutdownจะไม่ทำงาน ถ้าคุณทำสิ่งนี้แทน:

startx &
shutdown -r now

X จะทำงาน แต่การปิดระบบจะทำงานเช่นกันทันที (ไม่มีจุดหมายอย่างชัดเจน)

คุณไม่จำเป็นต้องใช้เคล็ดลับนั้นถ้าคุณไม่สนใจว่าจะมีการปิดระบบ - ดังกล่าวผู้ใช้จะได้รับพร้อมท์การเข้าสู่ระบบ ctrl-alt-backspaceแต่ก็ไม่ดูเหมือนเป็นความคิดที่มีประโยชน์ตั้งแต่นั้นคุณก็สามารถปิดได้ด้วย แนวคิดอื่นหากแอปของคุณปิดใช้งานจะต้องใช้startx &ในสคริปต์เริ่มต้นซึ่งแบ็คกราวด์มันและอนุญาตให้ init ดำเนินการต่อตามปกติ (ไม่เป็นไร X จะยังคงทำงานอยู่และมีการควบคุมจอแสดงผล - "พื้นหลัง" เป็น อาจเป็นคำที่สับสน) แทนที่จะใส่สคริปต์เริ่มต้นให้ใส่ shutdownxinitrc แทน:

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

su -c myApp pi
shutdown -r now

เคล็ดลับสถานที่ที่แตกต่างกัน ตอนนี้เมื่อมีคนปิดmyAppตัวการปิดจะเกิดขึ้น (แต่ถ้าพวกเขาฆ่า X มันจะไม่เกิดขึ้น) คุณสามารถทำได้ทั้งสองวิธี แต่จริง ๆ แล้วฉันชอบสิ่งนี้ดีกว่าเพราะมันหมายความว่าคุณสามารถออกจาก X และเข้าสู่ระบบซึ่งอาจมีประโยชน์ในบางครั้งและคุณสามารถปิดระบบได้อย่างง่ายดายจาก GUI

ไม่ใช้&แบ็คกราวน์ ( ) myApp ใน. xinitrc แม้ว่าจะไม่มีการปิดระบบหลังจากนั้นเพราะเมื่อ. xiitrc ออกจาก X แล้ว;) การโทรครั้งสุดท้ายจะต้องคงอยู่ในโหมด foreground (ปกติคือ DE หรือหน้าต่าง ผู้จัดการ).

สคริปต์เริ่มต้นและ.xinitrcเป็นแนวคิดที่คล้ายกัน หนึ่งรันโดยinitซึ่งเป็นกระบวนการ 1 บน linux (เป็นกระบวนการเดียวที่เริ่มต้นโดยเคอร์เนล) อีกอันคือเซิร์ฟเวอร์ X โปรดทราบว่ามีไฟล์. xinitrc และคำสั่ง xinitrc (ไฟล์เหล่านี้เกี่ยวข้องกัน แต่ไม่เหมือนกัน)


หาก Raspbian ใช้/etc/inittabแต่คนอื่นส่วนใหญ่ไม่ได้ใช้อีกต่อไปพวกเขาจะใช้อะไรแทน
แอนดรู

ดังนั้นหากฉันต้องการอนุญาตการเข้าถึง ssh ในขณะที่แอปของฉันทำงานอยู่เบื้องหน้าฉันต้องตรวจสอบให้แน่ใจว่า.xinitrcสคริปต์ของฉันทำงานหลังจากนั้นใช่ไหม
แอนดรู

Debian ใช้ระบบเริ่มต้น "sysV" และinittabเป็นส่วนหนึ่งของสิ่งนั้น ภูต init ร่วมกันมากขึ้นอยู่ในขณะนี้และsystemd upstart
goldilocks

WRT แอปของคุณทำงานในเบื้องหน้านี่เป็นเพียงเพราะ (sysV) initรอให้ผู้ติดตามเหล่านั้นกลับมาก่อนที่จะเริ่มหน้าถัดไป ดังนั้นตามปกติในสคริปต์ init ถ้าคุณจะเริ่มต้นให้บริการถาวรคุณพื้นหลัง (aka. ส้อม) &ผ่านทาง จากนั้นสคริปต์จะหยุดทำงาน แต่กระบวนการ "แบ็คกราวน์" จะดำเนินต่อไป "การทำฉากหลัง" หมายถึงสายการปฏิบัติการไม่ใช่สิ่งที่ปรากฏบนหน้าจอ - คุณสามารถแบ็คกราวน์ X ของคุณ ( lightdmต้องเป็นพื้นหลัง) ... ฉันจะแก้ไขบางอย่างเกี่ยวกับเรื่องนี้
goldilocks

WRT ssh sshบริการ (เชื่อมโยงเข้า/etc/rc[N].d) ควรเริ่มต้นต่อหน้าคุณเพื่อที่จะทำงาน ("ในพื้นหลัง") เพื่อตอบรับการเชื่อมต่อ มันยังคงเป็นระบบมัลติทาสกิ้ง;)
goldilocks

2

ดูโครงการ 'Digital Signage' นี้ มันบูทไปที่ GUI จากนั้นเปิดเบราว์เซอร์ที่ขับเคลื่อนด้วย HTML5 ฉันยังไม่ได้ลอง แต่ฉันต้องการ บางทีคุณสามารถใส่แอปพลิเคชันแทนเบราว์เซอร์เพื่อบูตแบบเต็มหน้าจอ

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


ขอบคุณสำหรับคำตอบของคุณ แต่ดูเหมือนว่าจะแทนที่ Raspbian ที่กำหนดค่าให้แสดงเบราว์เซอร์ ฉันต้องการเรียนรู้ขั้นตอนในการกำหนดค่า Raspbian ตามที่ฉันต้องการ
แอนดรู

ไม่มีการพูดถึง Raspbian ในคำถามของคุณ ลองสิ่งนี้ pikiosk.tumblr.com/post/38721623944/…
gurcanozturk

0

Raspberry Digital Signage ที่กล่าวถึงเป็นระบบปฏิบัติการที่แสดงมุมมองแบบเต็มหน้าจอที่ จำกัด ไว้ที่หน้าเว็บหรือรายการเล่นสไลด์โชว์ / วิดีโอที่ระบุโดยไม่มีทางหนีรอด แต่รีบูตเครื่อง

ในความเป็นจริงมันสามารถแสดงทั้งมุมมองเว็บ (HTML / HTML5 แสดงหน้า) และมุมมองมัลติมีเดีย (สไลด์โชว์ภาพและเครื่องเล่นวิดีโอ) มุมมองเว็บมีมุมมองย่อยที่แตกต่างกันสามแบบ: Firefox, Chromium และ Midori (พร้อมการสนับสนุน Gnash)

ประสบการณ์ Chrome และ Midori เป็นคุณลักษณะของรุ่น 2.0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.