목차
Deai 는 Linux 데스크탑을 자동화하는 도구입니다. Linux 시스템의 일반적인 이벤트 및 인터페이스를 스크립팅 언어에 노출시켜 사용자가 이벤트 중심 스크립트로 작업을 자동화 할 수 있도록합니다. 예제는 시간이 지남에 따라 화면 밝기를 변경하거나 자동으로 장착/탈착식 스토리지를 자동으로 장착 할 수 있습니다.
DEAI는 쉘 스크립트를 사용하는 것과 비교하여 다른 사람들이 만든 다른 명령의 모음이 아니라 단일 도구이므로 더 일관성이 있습니다. DEAI의 인터페이스로 이벤트를 처리하는 것이 명령에서 텍스트 출력을 읽고 구문 분석하는 것보다 훨씬 좋습니다.
!!!경고!!! Deai는 현재 큰 발전을 받고 있습니다. 상황이 깨지거나 올바르게 작동하지 않을 수 있습니다. DEAI 용 플러그인을 작성하려는 경우이 저장소에 직접 기여하거나 DEAI가 안정 될 때까지 기다리십시오. Deai의 API 나 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 지원 : 이제 많은 인터페이스가 udisks 와 같은 DBUS를 통해 노출되어 이동식 스토리지를 관리하고 전원 관리를위한 Upwer를 통해 노출됩니다. 따라서 분명히 DBUS 지원은 필수입니다.
오디오 : ALSA 또는 Pulseaudio를 통해 볼륨을 조정합니다
네트워크 : 네트워크 이벤트를 지원하고 이에 반응합니다. 예를 들어, 열린 WiFi로 전환 한 후 VPN에 자동으로 연결하십시오.
전원 관리 : 전원 공급 조건 변경 등에 반응합니다.
UI 구성 요소 : 트레이 아이콘, 메뉴 등을 만들 수 있으므로 GUI를 사용하여 DEAI 와 상호 작용할 수 있습니다.
더 많은 언어 : 모두가 좋아하는 스크립팅 언어를 지원하십시오!
그리고 더 ... 당신이 무언가를 원한다면 문제를 열어주십시오.