ฉันไม่เคยลองทำเช่นนี้ แต่ดูเหมือนว่าคุณยังคงมองหาและไม่ได้รับคำตอบในรอบเกือบหนึ่งเดือนฉันจะบอกคุณว่าจะเริ่มที่ไหนดี
วิธีการนี้เป็นวิธีโบราณ แต่เค้าโครงทั่วไปดูเหมือนจะเป็นเสียง คุณไม่ต้องทำทุกอย่างเหมือนกันหมด มันมุ่งเน้นไปที่การใช้เว็บเบราว์เซอร์เป็นจุดศูนย์กลาง แต่ส่วนใหญ่ไม่เกี่ยวข้องที่นี่ (กล่าวคือผ่อนคลายมันไม่ใช่ "เว็บตู้" อื่น)
มันหมายถึง/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 จะยังคงทำงานอยู่และมีการควบคุมจอแสดงผล - "พื้นหลัง" เป็น อาจเป็นคำที่สับสน) แทนที่จะใส่สคริปต์เริ่มต้นให้ใส่ shutdown
xinitrc แทน:
#!/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 (ไฟล์เหล่านี้เกี่ยวข้องกัน แต่ไม่เหมือนกัน)
/etc/inittab
แต่คนอื่นส่วนใหญ่ไม่ได้ใช้อีกต่อไปพวกเขาจะใช้อะไรแทน