[Mac] ユーザログイン時にスクリプトを実行する方法
LaunchAgents
PC 起動後のユーザーログイン時にスクリプトを実行する手段はいくつかあると思いますが、今回は LaunchAgents という仕組みについて説明します。
LaunchAgents は macOS の launchd
というサービスによって管理されるプロセスであり、ユーザーがログインしたときにロードされます。
この仕組を利用してユーザーログイン時にスクリプトを実行してみます。
処理を実行するためには ~/Library/LaunchAgents
に XML 形式で命令を記述した plist ファイルを配置します。
ユーザーログイン時にこのパスに存在するファイルが読み込まれ、必要に応じて処理が実施されます。
plist ファイル例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.example.hello</string> <key>ProgramArguments</key> <array> <string>hello</string> <string>world</string> </array> </dict> </plist>
辞書のトップレベルにある Label
と ProgramArguments
は共に必須のキーです。
- Label
- 起動する launchd プロセスで一意の文字列
- ProgramArguments
- プロセス起動の引数
実験
それでは LaunchAgents を利用して、デスクトップに helloworld
という空ファイルを作成してみましょう。
まずは ~/Library/LaunchAgents
に com.example.touch.plist
というファイルを作成し、以下の内容を記述します。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.example.touch</string> <key>ProgramArguments</key> <array> <string>touch</string> <string>/Users/tanakakeisuke/Desktop/helloworld</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
上記は touch
コマンドを実行する処理です。
tanakakeisuke の部分は自分のユーザー名に置き換えてください。
また、このパスは絶対バスで書かなければいけないようで、~/
では上手く動作しません。
キー RunAtLoad
はロードされたときに処理を行うというオプションで、こちらを true に設定します。
ここまでできたら以下のコマンドを実行し、シンタックスエラーがないかチェックしてみます。
$ plutil -lint com.example.touch.plist
問題なければ以下のメッセージが出力されます。
com.example.touch.plist: OK
ログアウト -> ログインで試してもいいのですが、launchctl
コマンドを用いて手動でロードすることもできます。
以下のコマンドを実行してみましょう。
$ launchctl load com.example.touch.plist
どうでしょうか。
デスクトップに helloworld
という空ファイルは作成されましたか?
もし作成されない場合は、標準出力と標準エラー出力を設定してデバッグしてみましょう。
<key>StandardOutPath</key> <string>/Users/tanakakeisuke/Desktop/standard_out.txt</string> <key>StandardErrorPath</key> <string>/Users/tanakakeisuke/Desktop/standard_error.txt</string>
何度かロードを試したい場合は一度アンロードをする必要があります。
$ launchctl unload com.example.touch.plist
上手く行ったら今度は実際にログアウトしてからログインして動作を確認してみましょう。
さいごに
LaunchAgents はユーザーログイン時に処理を実行するための macOS が提供する便利な仕組みです。
定期的に処理を実行することもできるので、興味のある方は使ってみてはいかがでしょうか。
リンク
ミレニアム・ファルコン製作日記 #68
68 号 表紙
パーツ
成果
今回の作業は以下の 1 つでした。
- 外殻プレートを組み立てる
船体後方にある機関室部分を覆う外殻プレートを組み立てました。
それだけ!
それではまた次回。
May the Force be with you!