|
現: 2020-12-26 (土) 16:07:35 yuji |
| + | * 自動ログインと自動プログラム実行 [#w4a0b19b] |
| + | Raspbian Stretchでの自動ログインと,起動時などでプログラムを自動実行したい場合の方法。 |
| | | |
| + | * 自動ログイン [#b199343b] |
| + | Raspberry Piを起動時に,自動的にログインしたい場合がある。 |
| + | |
| + | ** CUI環境の場合 [#c97df8d3] |
| + | ''/etc/systemd/system/getty.target.wants/getty@tty1.service''ファイルを編集する。 |
| + | ExecStart=-/sbin/agetty --autologin yuji --noclear %I $TERM |
| + | --autologin <ユーザ名>で,自動にログインさせたいユーザをセットする。 |
| + | |
| + | systemdの設定ファイルをリロードさせる。 |
| + | # systemctl daemon-reload |
| + | |
| + | 自動ログインしないようにするには,上記の設定をコメントアウトして,設定ファイルをリロードする。 |
| + | |
| + | ** GUI環境の場合 [#s5e53637] |
| + | Raspbian Stretchは,LXDEが使われている。 |
| + | |
| + | 自動ログインしたい場合は,''/etc/lightdm/lightdm.conf''ファイルを, |
| + | autologin-user=ログインしたいユーザ名 |
| + | autologin-user-timeout=0 |
| + | のように設定する。 |
| + | |
| + | デフォルトでは,piユーザがセットされている。 |
| + | |
| + | コメントアウトすれば,自動ログインしなくなる。 |
| + | |
| + | * 自動でプログラム実行 [#q64d78c0] |
| + | Raspberry Piを起動した後,プログラム等を自動実行したいことがある。~ |
| + | これを実現する場合には,いくつかの方法がある。 |
| + | |
| + | LinuxなどのUnix系なOSでは,OS起動時のプログラムの自動実行する仕組みとして,主に2種類の方法が混在している。~ |
| + | - SysVinitタイプ~ |
| + | - systemdタイプ~ |
| + | |
| + | 比較的新しいLinuxディストリビューションでは,systemdが採用されている。ディストリビューションによっては,systemdを主に使うが互換性からSysVinitタイプも使用できるようになっているものもある。~ |
| + | Raspberry PiのRaspbian Stretchもsystemdではあるが,SysVinitタイプでも使えるOSである。 |
| + | |
| + | 他の自動実行する仕組みとして,定時に実行する仕組みにcronがあるが,特殊な実行タイミングとしてreboot時がある,これを使用することでも起動時に自動実行できる。 |
| + | |
| + | また,CUI時のシェルログイン時,GUIでのログイン時,にプログラムを自動実行する仕組みもある。 |
| + | |
| + | ** /etc/rc.localを使用する [#n5a77d03] |
| + | 起動時には,''/etc/rc.local''というスクリプトファイルが,initプロセスにより実行されるようになっている。 |
| + | |
| + | そこで,''/etc/rc.local''ファイルの最後の''exit 0''の手前あたりに,実行したいプログラムを記述しておく。~ |
| + | 例えば,hogehoge.shというプログラムだったら, |
| + | hogehoge.sh |
| + | |
| + | exit 0 |
| + | |
| + | 注意することとして,プログラムは''root権限''で実行される。つまり,実行権限やアクセス権限も適切に設定する必要があります。~ |
| + | また,プログラムやファイルは,フルパスで記述する必要がある。 |
| + | |
| + | ** Systemdを使用する [#q69447df] |
| + | Systemdはバックグランドで実行されるデーモンプログラムを管理するシステム。~ |
| + | この機能を使用して,起動時にプログラムを実行させることが出来る。 |
| + | |
| + | autoexec.shというプログラムを実行したい場合,まず,''/etc/systemd/system/myautoexec.service''を作成する。 |
| + | [Unit] |
| + | Description = My autoexec program |
| + | After=syslog.target |
| + | |
| + | [Service] |
| + | Type=simple |
| + | WorkingDirectory = /home/yuji/autoexec |
| + | ExecStart = /home/yuji/autoexec/autoexec.sh |
| + | TimeStopSec=5 |
| + | StandardOutput=null |
| + | |
| + | [Install] |
| + | WantedBy=multi-user.target |
| + | Descriptionにサービス名,WorkingDirectoryに作業ディレクリ名,ExecStartに実行したいプログラムを記述すれば良い。 |
| + | |
| + | 実行時にユーザを指定したい場合は,[Service]セクションに, |
| + | User=ユーザ |
| + | Group=グループ |
| + | というようにすれば,指定出来る。これがなければrootで実行される。 |
| + | |
| + | 実際に起動するには,systemctlコマンドを使用する。~ |
| + | |
| + | 実行する場合, |
| + | $ sudo systemctl start myprogram |
| + | 停止する場合, |
| + | $ sudo systemctl stop myprogram |
| + | リブート(起動)時に実行させる場合, |
| + | $ sudo systemctl enable myprogram |
| + | リブート(起動)時に実行させない場合, |
| + | $ sudo systemctl disable myprogram |
| + | のようにする。 |
| + | |
| + | ** cronを使用する [#m05e08ad] |
| + | cronを使用してユーザー権限でプログラムを実行することが出来る。 |
| + | |
| + | cronでスケジュールを登録する時(crontab -e)に, |
| + | @reboot /home/yuji/hogehoge.sh |
| + | って登録すると,起動時にhogehoge.shを実行してくれる。 |
| + | |
| + | crontab -eで登録したユーザの権限で実行される。 |
| + | |
| + | ** .bash_profile(.bashrc)を利用する [#r6db6979] |
| + | ログイン時のログインシェルの起動時に自動的にプログラム実行させたい場合は,~/.bash_profile(もしくは,~/.bashrc)に,実行させたいプログラムを記載する。 |
| + | |
| + | ただシェル起動時に毎回実行されるため,起動時のログイン時だけプログラムを実行するには工夫が必要。 |
| + | |
| + | ** GUI環境での自動実行 [#lc6ed569] |
| + | GUI環境(デスクトップ)が起動後,プログラムを自動実行するには,''~/.config/lxsession/LXDE-pi/autostart''ファイルに,実行したいプログラムを登録する。 |
| + | |
| + | 例えば,''/home/yuji/hogehoge.sh''を起動したい場合, |
| + | @/home/yuji/hogehoge.sh |
| + | というように記述する。 |
| + | |
| + | * CUI環境とGUI環境の切り替え [#z26aa43c] |
| + | 現在,CUI環境かGUI環境か調べる場合は, |
| + | # systemctl get-default |
| + | multi-user.target |
| + | のようにして,確認する。multi-user.targetはCUI環境。 |
| + | |
| + | GUI環境から,CUI環境に切り替える場合は, |
| + | # systemctl set-default multi-user.target |
| + | CUI環境から,GUI環境に切り替える場合は, |
| + | # systemctl set-default graphical.target |
| + | として,再起動すれば良い。 |
| + | |
| + | # raspi-config |
| + | でもいいんだけど・・・ |