私はこれを試したことはありませんが、あなたがまだ探しているようで、ほぼ1か月たっても答えが得られないようです。
このハウツーは古くからありますが、全体的な概要はしっかりしているようです。まったく同じことをすべて行う必要はありません。Webブラウザーを中心に使用することに焦点を当てていますが、ここではほとんど関係ありません(つまり、リラックスしてください。これは別の「web-kiosk」ではありません)。
これは/etc/inittab
、ほとんどのLinuxディストリビューションで使用されなくなったを参照していますが、debian wheezy(raspbian)が使用しているようです。アイデアは、ランレベル4をキオスクとして使用し、それをデフォルトにすることです。それを行うか、現在のデフォルト(2または3だと思います)をそのまま使用できます。私が現在実行しているラズビアンは私によって変更されているので/etc/rc[N].d
、7つのランレベルに対応するディレクトリ間の元の違いが何であったかはわかりません。グラフィカルログイン(lightdm
)を開始しないものを使用するかlightdm
、そのランレベルから削除します。そのようなことを正しく行うこともできます(を参照man update-rc.d
)。
次に、ハウツーのこの部分に従って、ログインなしでXとアプリを起動するための独自のブートサービス(別名init)スクリプトを作成します。ただし、そのようにしないでください。debianに準拠する必要があるため、を参照してください/etc/init.d/README
。また、ウィンドウマネージャーを使用する必要はまったくありません(ただし、これfvwm
は素晴らしいことですが、特にこの種のことを考えているので、使用する場合は覚えておいてください).xinitrc
。
#!/bin/sh
myApp
単純なXでアプリのみを実行します-これは非常に単純です:メニュー、タイトルバー、ツールバーなどがないか、ユーザーが別のアプリケーションを起動したりシェルを取得したりする方法です。カーソルを提供するだけです。
これに関する問題は、ブートからデスクトップに直接移動すると、それがスーパーユーザーデスクトップになることです。実際、Xインスタンスのuidは常に0ですが、アプリケーションはxinitrcから実行され、Xを開始したユーザーとして実行されます。この場合、Xはinitによって開始されたため、ユーザーはrootになります(技術的にはrootはログインしていません)。したがって、上記のxinitrcは次の場合に適しています。
su -c myApp pi
代わりに、piユーザー(技術的にはログインしていないユーザー)としてアプリを実行します。
技術的には誰もログインしていないため、キオスクユーザーがXを(例:を介してctrl-alt-delete
)終了しても、ログインプロンプトが表示されたままになります。ハウツーはそれを超えて、サービスinitスクリプトがフォアグラウンドでX(下記の注を参照)を開始し、終了するとサービススクリプトが続行して実行されるようにしshutdown -r now
ます。
(通常の)マシンに物理的にアクセスできる人は、実装するセキュリティを常に回避できるため、ここで実際に実行しようとしていることは、あまりにも簡単で、厄介な事故を防ぐことではありません。
また、ブートサービスはこれをフォアグラウンドで実行するため、その後に他のサービスが実行されないことを忘れないでください。絶対に最後のサービスであることを確認してください。とても重要です!実際には、/etc/rc.local
代わりに使用することもできます。通常、これが最後であることが保証されているためです。
注:実際には、ハウツーで/root/kiosk
は、このセクションの別のスクリプトです。.xinitrc
上記のセクション(3.4)で示したスクリプトを参照するのは1行だけであることに注意してください。そのような行をブートスクリプトに直接挿入するだけです。すでに説明したように、(予備の)xinitrcははるかに単純になります。
initでフォアグラウンドを維持するための代替...
X呼び出しをフォアグラウンドにしておく目的は、Xが終了するまでinitスクリプトの実行をブロックするだけであり、スクリプトの次の行(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
。アプリがクローズ可能である場合のもう1つのアイデアstartx &
は、initスクリプトで使用することです。これにより、アプリがバックグラウンドになり、initが通常どおり続行されます(これで問題ありません。Xは引き続き実行され、ディスプレイを制御できます。 "backgrounded"はおそらく混乱する用語です)。initスクリプトの代わりに、代わりに shutdown
xinitrcを配置します。
#!/bin/sh
#/root/.xinitrc
su -c myApp pi
shutdown -r now
同じトリック、別の場所。誰かがを閉じるとmyApp
、シャットダウンが発生します(ただし、Xを強制終了しても、シャットダウンされません)。両方の方法で実行することもできますが、Xを終了してログインできるため、GUIから簡単にシステムの電源を切ることができるので、私は実際にこれをより気に入っています。
&
.xinitrcが完了するとXが終了するため、その後にシャットダウンがない場合でも、.xinitrcのmyAppをバックグラウンド()にしないでください。マネージャー)。
Initスクリプトと.xinitrc
同様の概念です。1つはによって実行されますinit
。これはLinuxのプロセス1です(これはカーネルによって開始される唯一のプロセスです)。もう1つはXサーバーによって実行されます。.xinitrcファイルとxinitrcコマンドがあることに注意してください(これらは関連していますが、同じではありません)。
/etc/inittab
が他のほとんどが使用していない場合、代わりに何を使用しますか?