目次
DEAIは、Linuxデスクトップを自動化するツールです。ユーザーがイベント駆動型スクリプトでタスクを自動化できるように、Linuxシステムの一般的なイベントとインターフェイスをスクリプト化言語に公開しようとします。例としては、時刻とともに画面の輝度を変更したり、取り外し可能なストレージを自動的に取り付けたり、取り外したりすることです。
シェルスクリプトを使用するのとは異なり、DEAIは異なる人々によって作成された異なるコマンドのコレクションではなく、単一のツールであるため、より一貫性があります。また、DEAIのインターフェイスを使用したイベントの処理は、コマンドからテキスト出力を読み取り、解析するよりもはるかに優れています。
!!!警告!!! DEAIは現在、激しい開発中です。物事は壊れたり、正しく機能しない可能性があります。 DEAI用のプラグインの作成を検討している場合は、このリポジトリに直接貢献するか、DEAIが安定するまで待ちます。これは、APIもDEAIのABIも確定していないためです。 DEAIへの新しい変更は、プラグインを壊す可能性があります。
DEAIのほとんどはここに文書化されています
ここに示されているいくつかの例もあります。詳細情報が必要な場合は、私に尋ねることができます
udevプラグイン用)dbusプラグイン用)xorgプラグイン用)lua用)fileプラグイン用)/path/to/deai module.method arguments...コマンドラインの引数がどのように機能するかについてのより詳細な説明はこちらで見つけることができます
現在、唯一のサポートされているスクリプト言語はLuaであるため、例はLuaで贈られます。
プログラムの立ち上げ
-- "di" is how you access deai functionality in lua
-- "di.spawn" refers to the "spawn" module
-- "run" is the method that executes program
p = di . spawn : run ({ " ls " , " -lh " })
p : on ( " stdout_line " , function ( line )
print ( " output: " , line )
end )
p : on ( " exit " , function ()
-- This tells deai to exit
di : quit ()
end )タイマーを設定します
di . event : timer ( 10 ): on ( " elapsed " , function ()
print ( " Time flies! " )
end )環境変数を変更/設定します
di . os . env [ " PATH " ] = " /usr "ファイルの変更を見る
(考えられるすべての信号についてはこれを参照)
watcher = di . file : watch ({ " . " })
watcher : on ( " open " , function ( dir , filepath )
print ( dir , filepath )
end )Xorgに接続します
-- Connect to Xorg is the first step to get X events
xc = di . xorg : connect ()
-- You can also use :connect_to(DISPLAY)XRDBを設定します
-- Assuming you have connected to X
xc . xrdb = " Xft.dpi: t 192 n "Xキーバインディング
(詳細については、これを参照してください)
-- Map ctrl-a
xc . key : new ({ " ctrl " }, " a " , true ): on ( " pressed " , function ()
-- do something
end )新しい入力デバイスの通知を取得します
xc . xinput : on ( " new-device " , function ( dev )
print ( dev . type , dev . use , dev . name , dev . id )
-- do something about the device
end )入力デバイスのプロパティを変更します
(詳細については、これを参照してください)
-- Assuming you get a dev from an "new-device" event
if dev . type == " touchpad " then
-- For property names, see libinput(4)
dev . props [ " libinput Tapping Enabled " ] = { 1 }
end
if dev . name == " <<<Some touchscreen device name here>>> " then
-- Map your touchscreen to an output, if you use multiple
-- monitors, you will understand the problem.
M = compute_transformation_matrix ( touchscreen_output )
dev . props [ " Coordinate Transformation Matrix " ] = M
end解像度が変更されたとき、または新しいモニターが接続されているときなどに通知を受け取ります。
(詳細については、これを参照してください)
-- Note: RandR support is not quite done
xc . randr : on ( " view-change " , function ( v )
-- A "view" is a rectangular section of the X screen
-- Each output (or monitor) is connected to one view
for _ , o in pairs ( v . outputs ) do
-- But each view might be used by multiple outputs
print ( o . name )
end
end )バックライトを調整します
for _ , o in pairs ( xc . randr . outputs ) do
-- Backlight must be set with an integer, math.floor is required here
o . backlight = math.floor ( o . max_backlight / 2 )
end DBUSサポート:多くのインターフェイスがDBUを介して露出しています。たとえば、リムーバブルストレージを管理するためのUDISKS 、Power Managementのウパワーを管理しています。したがって、明らかにDBUSサポートは必須です。
オーディオ: AlsaまたはPulseaudioを介して、ボリュームなどを調整します
ネットワーク:ネットワークイベントをサポートし、それらに対応します。たとえば、開いたWiFiに切り替えた後、VPNに自動的に接続します。
電力管理:電源条件の変化などに対応します。
UIコンポーネント: Trayアイコン、メニューなどを作成できるように、GUIを使用してDEAIと対話できます。
より多くの言語:みんなのお気に入りのスクリプト言語をサポートしてください!
もっと...何かが欲しいなら、問題を開いてください。