전원 공급 장치가 연결되어 있거나 꺼져있을 때 어떻게 스크립트를 실행할 수 있습니까?


8

어떤 이유로 전원 공급 장치를 연결하거나 분리 할 때 랩탑의 화면 밝기가 업데이트되지 않습니다. 그 문제에 대한 몇 가지 해결책을 살펴 보았지만 그중 어느 것도 잘 작동하지 않는 것 같습니다. 그래서 절망과 포기 대신에 이것을 학습 경험으로 바꾸려고 노력하고 나를 위해 그것을하는 대본을 쓸 수 없는지 알아보기로 결정했습니다.

물론 인터넷에서 도움을 받아 스스로 알아 내려고 시도했지만 일반적으로 스크립팅과 우분투를 처음 접했을 때 멀지 않았습니다.

내가 알아낼 수 있었던 것은 배터리의 상태

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging

AC 어댑터가 연결되어 있는지 여부에 따라 다릅니다. 나는 그것이 유용한 지 잘 모르겠지만, 그것은 멋지다. 그리고 grep전에 사용하는 방법을 몰랐다 .

어쨌든, 이것을하는 다소 깨끗한 방법이 있습니까? "깨끗한 방법"이란 bash 스크립트 경험이 제한된 사람이 이해할 수있는 방법을 의미합니다.

내가 좋은 답을 찾았다는 비슷한 질문은 this입니다 .

AC 어댑터를 꽂거나 뺄 때, 스크립트는 /etc/pm/power.d"true"(배터리로 실행하는 경우) 또는 "false"(전원> 어댑터로 실행하는 경우) 인수로 호출됩니다.

문제는 스크립트 내에서 해당 인수에 액세스하는 방법을 모른다는 것입니다. 그래서 나는 그것이 매우 간단한 문제로 귀결된다고 생각하지만, 사람들이 더 나은 해결책을 가지고 있다면 어쨌든 질문을 게시 할 것이라고 생각했습니다.

답변:


5

on_ac_power전원 공급 장치를 켜거나 끌 때 스크립트를 실행하는 데 사용할 수 있습니다 .

터미널에서 다음을 시도하십시오.

$ on_ac_power
$ echo $?
0              ## Laptop on ac power

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)

이를 바탕으로 스크립트를 다음과 같이 만들 수 있습니다.

#!/bin/bash
while true
do
    if on_ac_power; then 
        do_something               ## Laptop on power
    else
        do_something_else          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done

편집 : [ 카 시야가 제안 ]

cron job 무한 루프를 사용하는 대신 규칙적인 간격으로 스크립트를 실행하는 것이 좋습니다.

스크립트를 다른 이름으로 저장 myscript.sh하고 다음 내용을 넣습니다.

#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi

터미널에서 스크립트를 실행 가능하게하십시오 chmod +x /path/to/myscript.sh. 개인 crontab을 열고 EDITOR=gedit crontab -e다음 줄을 추가하여 매분마다 스크립트를 실행하십시오.

* * * * * /path/to/myscript.sh 

스크립트를 무한대로 실행하는 것은 나쁜 습관입니까, 아니면 정기적으로 발생하고 시스템에 내장 된 것입니까? 나는 일종의 방아쇠를 찾고 있다고 생각하지만 이것이 작동하면 가정했던 것보다 훨씬 덜 복잡합니다.
재스퍼

@ TheQZ : 나는 'souravc'이 기본 아이디어를 주었다고 생각합니다 .. 당신은 이것을 기반으로 자신을 쓸 수 있습니다 :)
heemayl

@TheQZ 영원히 실행되지만 10 초당 한 번만 활성화됩니다 (체크 시간을 늘릴 수 있음). 매 x x 간격마다 명령반복 하는 방법에 대한 질문을보십시오 . 그렇지 않으면 초보자에게는 훨씬 복잡한 자체 데몬 프로그램을 작성해야합니다.
souravc

당신은 사용할 수 있습니다 @TheQZ souravc A와의 답을 크론 작업. 이 답변의
αғsнιη

2
더 나은 방법은 askubuntu.com/questions/613741/… 과 같이 udev 규칙을 사용하는 입니다.
Anthony Wong
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.