ザリガニが見ていた...。ザリガニが見ていた...。読者になるザリガニが見ていた...。この広告は、90日以上更新していないブログに表示しています。2011-07-15スリープをカーネル機能拡張からコントロールするmacinsomnia=不眠症。不眠症というだけあって、InsomniaXはMacBookのスリープを強力に制限してくれる。ディスプレイを閉じた時のスリープ。電源ボタンを押して、終了ダイアログからのスリープ。アップルメニューからのスリープ。command-option-Ejectによるショートカットのスリープ。sleepnowコマンドによるスリープ。AppleScriptによるスリープ。以上、ありとあらゆるスリープが無効となるのだ。Demandによるスリープ中のアクセスが保証されているので、あえて不眠症にする理由はほとんどない。Demandの恩恵は受けられなくなってしまう。Demandによるアクセスが可能になる。思って、やってみたのが以下の日記。実行するようにしてみたのだ。ところが、InsomniaXのアイコンメニューは、GUIスクリプティングを使っても操作できなかった*1。そのため、cliclickというマウスのクリックをシミュレートするコマンドを利用して操作するようにしたのだ。当初はうまく動いていたが、欠点がある。cliclickコマンドは、ディスプレイ左上を原点とした絶対座標でクリック位置を指定するので、アイコンメニューの並びが変わると、全く無意味な操作になってしまうのだ。アイコンメニューの並び順を指定するツールもあるが、新規インストールや削除することもあるので、InsomniaXのアイコン位置が固定される訳ではない。何より、開発したマシン環境限定のスクリプトとなってしまう。他の環境で使おうと思ったら、cliclickコマンドの座標を調整しなくてはならない今イチなスクリプトだった。して、もっとスマートにInsomniaXをコントロールする方法はないのか?以前から模索していたのだが、久々にInsomniaXの本家ページを閲覧して、そのヒントに気付いた。ヒント2つの情報がヒントとなった。いうカーネル機能拡張をダウンロードして、アップデートしておく必要があるらしい。semaja2ラッパーInsomniaXは、Insomniaというカーネル機能拡張のラッパーとして動作するらしい。担っていると想像した。Insomnia.kextをコントロールできれば、InsomniaX.appを使わなくてもスリープを無効にできるはず。カーネル機能拡張のコントロールInsomniaX.appに頼らないで、Insomnia.kextをコントロールする方法は、たった二つしかない。kextloadとkextunload。kextloadコマンドで、Insomnia.kextをカーネルにロードして有効にする。kextunloadコマンドで、Insomnia.kextをカーネルからアンロードして無効にする。!さっそく試してみた。kextutil(8).しかし、残念ながらエラー発生!どうやらカーネルはアクセス権限に厳格らしい。ないと受け付けてくれないらしい。素直にこれを活用させてもらうことにした。Support/InsomniaX/Insomnia_r6.kext実行はすぐに完了した。ディスプレイを閉じてみた。スリープする様子はない。成功した!(ようだ)カーネル機能拡張のロード状況を確認するコマンドもある。kextstatしかし、これでは画面がカーネル機能拡張で溢れてしまうので、apple以外のkextに限定してみた。1>一番最後の行に、insomniaが確認できた!Insomnia.kextを無効にするには、loadをunloadに変更して実行ればOK。Support/InsomniaX/Insomnia_r6.kext一時的にスリープを許可する有効・無効の設定方法は分かった。やって、Insomnia.kextにスリープを依頼しているのだろう?Insomnia.kextの本家ページでも調べてみたが、kextload、kextunload以外の手段は無さそうだ。そのヒントはkernel.logに隠されていた。Systemを実行したときのログ。========================何と!スリープする前に、Insomnia.kextは一旦終了しているように見える。(kextunload)そしてスリープが解除されると、Insomnia.kextは再び動き出しているように見える。(kextload)同じような動作になるように、コマンドで実行してみた。アンロードしていただけ、だったのだ。ロードするので有効になる。Demandで接続して操作もできるのだ。Insomnia.kextはあくまでもスリープを無効にすることに特化したカーネル機能拡張で、InsomniaX.appは、それをロード・アンロードするタイミングを調整するだけで、便利な環境を提供してくれていたのだ。これで、InsomniaX.appに頼らずに、スリープの有効・無効を自由にコントロールできるようになった!*1:ステータスメニュー形式のアイコンメニューは操作できるが、それ以外のアイコンメニューはInsomniaXに限らず、GUIスクリプティングで操作できない。10.6(SnowLeopard)では、標準添付されるほぼすべてのソフ...2010-01-25コマンドから引き出すGUIの機能OSXが素晴らしいGUI環境を提供してくれるのだから、わざわざコ...2010-01-14モニタを閉じてスリープ中のMacBookをリモート操作できる環境にするMacBookのモニタを閉じると普通はスリープする。読者になるこのブログについて検索リンク記事一覧はてなブログをはじめよう!zariganitoshさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?はてなブログをはじめる(無料)はてなブログとはザリガニが見ていた...。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。