Raspberry Piを起動時に,自動的にログインしたい場合がある。
''/etc/systemd/system/getty.target.wants/getty@tty1.service''ファイルを編集する。
ExecStart=-/sbin/agetty --autologin yuji --noclear %I $TERM
--autologin <ユーザ名>で,自動にログインさせたいユーザをセットする。
systemdの設定ファイルをリロードさせる。
# systemctl daemon-reload
自動ログインしないようにするには,上記の設定をコメントアウトして,設定ファイルをリロードする。
Raspberry Piを起動した後,プログラム等を自動実行したいことがある。
これを実現する場合には,いくつかの方法がある。
LinuxなどのUnix系なOSでは,OS起動時のプログラムの自動実行する仕組みとして,主に2種類の方法が混在している。
比較的新しいLinuxディストリビューションでは,systemdが採用されている。ディストリビューションによっては,systemdを主に使うが互換性からSysVinitタイプも使用できるようになっているものもある。
Raspberry PiのRaspbian Stretchもsystemdではあるが,SysVinitタイプでも使えるOSである。
他の自動実行する仕組みとして,定時に実行する仕組みにcronがあるが,特殊な実行タイミングとしてreboot時がある,これを使用することでも起動時に自動実行できる。
また,CUI時のシェルログイン時,GUIでのログイン時,にプログラムを自動実行する仕組みもある。
起動時には,/etc/rc.localというスクリプトファイルが,initプロセスにより実行されるようになっている。
そこで,/etc/rc.localファイルの最後のexit 0の手前あたりに,実行したいプログラムを記述しておく。
例えば,hogehoge.shというプログラムだったら,
hogehoge.sh exit 0
注意することとして,プログラムはroot権限で実行される。つまり,実行権限やアクセス権限も適切に設定する必要があります。
また,プログラムやファイルは,フルパスで記述する必要がある。
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を使用してユーザー権限でプログラムを実行することが出来る。
cronでスケジュールを登録する時(crontab -e)に,
@reboot /home/yuji/hogehoge.sh
って登録すると,起動時にhogehoge.shを実行してくれる。
crontab -eで登録したユーザの権限で実行される。
新しくコメントをつける