osx yosemite,デスクトップイメージをコマンドラインから変更するニワ
と言う事でして相も変わらず,誰の興味も惹かず,役にも立たないようなお話ですwww
# デスクトップを変更する. desktopPicture="/Library/Desktop Pictures/Solid Colors/Solid Gray Pro Ultra Dark.png" osascript -e 'tell application "Finder" to set desktop picture to POSIX file "'"$desktopPicture"'"'
UI からですと,[システム環境設定] の [デスクトップとスクリーンセーバ] で,[デスクトップ] パネルにあるリストから [Apple > 無地の色 > ソリッドグレイ・プロ・ウルトラダーク] と操作したのに同じ,かと*1.
参照先はコチラ.;
The simplest way to do it in one line:
osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'
via. [How do I change desktop background with a terminal command - Ask Different][00]
いつもの通り defaults
や plistuddy
を道具にさらっと終わるだろうと考えていたら全くそうでなく,想定を遥かに超える労を費やしてしまいました.
更には辿りつく結果というものが,よりによって applescrit に頼らなければならない,と言うことでスッキリせず.と言うか,気分悪い :(
以下,今回の作業で知った事メモ.
デスクトップの設定はこの辺りらしい....んだけど
設定はどこで管理されているかを知るのに,まずは defaults
の "read" で設定前後のリダイレクト結果を diff
り,それでだめなら opensnoope
,と言ったワークフローを採っているのですが,どうもそれでは当たりがつかない.((あとこのあたりの手続き,どうしているかについては,整理の意味をも込めて自分の為にも(笑 追って採りあげてみたいと考えていたりします.))
opensnoop
の応え見ると,
/Library/Caches/com.apple.desktop.admin.png
やら /System/Library/CoreServices/DefaultDesktop.jpg
やら,デスクトップの画像データが置かれている /Library/Desktop Pictures/Solid Colors/
の png ファイル辺りが何やらうごめいているようですが...
よくわからない.
plist
じゃない,と言う事みたい,たぶん
ですので今までみたいな感覚で捉えては駄目みたいです.
今回のデスクトップの画像に関する設定は,これまで出会ってきたような,*.plist
に設定値を書き込む,という仕組みでない,と.
だから,上述の default
や opensoop
を使ったやり方では引っ掛からない,というわけです.
ではその設定はどこで,どんな仕組みで? となるのですが.
どうやらこう言うことらしいです...
それはどうやら sqlite DB とな
デスクトップ画像の設定は sqlite DB を使ったものらしいのです.
具体的には ~/Library/Application\ Support/Dock/desktoppicture.db
とのこと.
そして使う道具は sqlite3
となり,これで上述 db を突っつくことになるらしいです.
sqlite DB を使う,この仕組みになったのは 10.9 Mavericks からのようで,それまでは当初想定していた "いつもの" plist によるものだったらしい.
つか sql って,なつかしい(遠目
と言う事でして...
sqlite3
を使っての方法
実は今回はじめて sqlite3 を使う.
% type sqlite3
確かに居る.知らなかった...
と言う事で,コチラやコチラの手続きを参照しながらやってみる.
% sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/Library/Desktop Pictures/Earth Horizon.jpg'"; % killall Dock;
のですが,自分の環境では上手くいきませんでした.
自身のやり方に何か問題があったのかもしれませんが.
気になったので...;
sqlite って?
見よう見真似で。
% sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db SQLite version 3.8.5 2014-08-15 22:37:57 Enter ".help" for usage hints. sqlite> .tables data displays pictures preferences prefs spaces sqlite> PRAGMA table_info('data'); 0|value||0||0 sqlite> select * from data; sqlite> update data set value = "/Library/Desktop Pictures/Earth Horizon.jpg"; sqlite> .quit
data
ってテーブルらしいのですが、いる?、と言う事を確かめてみたく。
居ますね。
「どんなテーブルがあるか」を知るには、.table
だそう。value
ってカラムある? ということで。
「そのテーブルを構成するカラムは」を知りたい時は、PRAGMA table_info('<テーブル名>');
とのこと。
ちなみに、最後のセミコロン;
は必要とのこと。SQL 文の場合は後ろにセミコロンを付けると言う事のようですが、これも...なの?- では更新前の
value
の値は?。 反応なし。 - アップデートかけてみる。 反応なし。
sqlite っては勿論データベース RDBMSなんですが,他の RDBMS との間でどんなキャラかと言うと軽いこと.それは《アプリケーションに組み込んで利用され》るかたちで使われるのだそう.
osx だと《tiger だから 10.4*2 から》導入されるようになったとのこと.
というのを約 10 年間知らずにここまで来ていたのだと...溜息
無知を知るというのは実に悲しい.
というところでおしまい.です.