내 Dell 노트북은 다음의 영향을 받습니다.이것커널 3.14의 버그. 해결 방법으로 간단한 스크립트를 작성했습니다.
/usr/bin/밝기 수정:
#!/bin/bash
echo 0 > /sys/class/backlight/intel_backlight/brightnes
(그리고 실행 가능하게 만듭니다 chmod +x /usr/bin/brightness-fix
:)
그리고 시작 시 이를 호출하는 시스템 서비스:
/etc/systemd/system/brightness-fix.service
[Unit]
Description=Fixes intel backlight control with Kernel 3.14
[Service]
Type=forking
ExecStart=/usr/bin/brightness-fix
TimeoutSec=0
StandardOutput=syslog
#RemainAfterExit=yes
#SysVStartPriority=99
[Install]
WantedBy=multi-user.target
다음을 활성화합니다.systemctl enable /etc/systemd/system/brightness-fix.service
이것은 매우 매력적이며 필요에 따라 모니터 밝기를 제어할 수 있습니다. 문제는 절전 모드로 들어간 후(예: 노트북 가장자리를 닫을 때) 노트북이 다시 시작될 때 발생합니다. 위의 첫 번째 스크립트를 수동으로 실행하지 않으면 밝기 제어가 더 이상 작동하지 않습니다./usr/bin/brightness-fix
복구 시 실행하기 위해 위와 같은 다른 시스템 서비스를 어떻게 생성합니까?
편집하다:
아래 댓글을 토대로 brightness-fix.service
다음과 같이 수정했습니다.
[Unit]
Description=Fixes intel backlight control with Kernel 3.14
[Service]
Type=oneshot
ExecStart=/usr/local/bin/brightness-fix
TimeoutSec=0
StandardOutput=syslog
[Install]
WantedBy=multi-user.target sleep.target
echo "$1 $2" > /home/luca/br.log
또한 실제로 실행되는지 확인하기 위해 스크립트에 추가했습니다 . 스크립트는 실제로 post suspend
이력서()에서도 실행되지만 효과가 없습니다(백라이트는 100%이며 변경할 수 없습니다). 또한 로깅 $DISPLAY
을 시도했지만 $USER
복원 시에는 비어 있습니다. 그래서 내 생각에는 잠에서 깨어날 때 스크립트가 너무 일찍 실행되는 것 같습니다. 어떤 팁이 있나요?
답변1
이것은 오래된 질문이라는 것을 알고 있지만 다음 유닛 파일을 사용하면 절전 모드에서 다시 시작할 때 스크립트를 실행할 수 있습니다.
[Unit]
Description=<your description>
After=suspend.target
[Service]
User=root
Type=oneshot
ExecStart=<your script here>
TimeoutSec=0
StandardOutput=syslog
[Install]
WantedBy=suspend.target
나는 그것이 After=suspend.target
컴퓨터가 잠자기 상태가 될 때가 아니라 재개 시에 실행되게 만드는 것이라고 믿습니다.
답변2
유닛 파일을 작성하고 활성화하는 대신 쉘 스크립트(또는 스크립트에 대한 심볼릭 링크)를 /lib/systemd/system-sleep/
.
절전/최대 절전 모드 전과 재개 시 호출됩니다.
~에서man systemd-suspend.service
:
시스템 일시 중지 및/또는 최대 절전 모드에 들어가기 전에 systemd-suspens.service(및 언급된 다른 장치)는 /usr/lib/systemd/system-sleep/에 있는 모든 실행 파일을 실행하고 두 개의 매개 변수를 전달합니다. 첫 번째 매개변수는 "pre"이고 두 번째 매개변수는 선택한 작업에 따라 "일시 중지", "최대 절전 모드" 또는 "하이브리드 절전"입니다. 시스템 일시 중지 및/또는 최대 절전 모드를 종료한 직후 동일한 실행 파일을 실행하지만 첫 번째 인수는 이제 "post"입니다. 이 디렉터리의 모든 실행 파일은 병렬로 실행되며 모든 실행 파일이 완료될 때까지 실행이 계속되지 않습니다.
다음과 같이 테스트해 보세요.
#!/bin/sh
# This file (or a link to it) must be in /lib/systemd/system-sleep/
logger -t "test" "\$0=$0, \$1=$1, \$2=$2"
답변3
처리를 위해 새 단위 파일을 사용하지 않는 mivk의 답변에 대한 후속 조치(내 질문 참조)노트북 덮개 사고에 어떻게 대응하나요?). 내 해결책은 100% 간단하지 않습니다.한숨을 쉬다) 절전 모드에서 나올 때 시스템이 불안정하기 때문입니다.
내 Fedora 26 시스템에는 다음을 포함하는 /usr/lib/systemd/system-sleep/sleepyhead
여기를 가리키는 심볼릭 링크를 넣었습니다 ./root/bin/sleepyhead
#!/bin/sh
## This file (or a link to it) must be in /lib/systemd/system-sleep/
# This is called when the lid is closed, as follows:
# $0=/usr/lib/systemd/system-sleep/sleepyhead, $1=pre, $2=suspend
# ...and when the lid is opened, as follows:
# $0=/usr/lib/systemd/system-sleep/sleepyhead, $1=post, $2=suspend
touch /tmp/sleepyrun
logger -t "sleepyhead" "Start: \$1=$1, \$2=$2"
if [ "$1" = "post" ] ; then
action="RUN trackpoint"
bash /root/bin/trackpoint >/tmp/trackpoint-run 2>&1
else
action="NO ACTION"
fi
logger -t "sleepyhead" "${action}: " "\$1=$1, \$2=$2"
스크립트 /root/bin/trackpoint
는 다음과 같습니다. 첫 번째 수면이 중요하다는 점에 유의하세요. 장치는 뚜껑을 열 때마다 설정되므로 처음부터 거기에 있는 것은 아닙니다. 잠자기 이외의 다른 작업을 시도하면 "sleepyhead" 스크립트를 종료하는 데 오랜 시간이 걸리고 포인터가 최소 60초 동안 정지됩니다. 또한, 위 /root/bin/trackpoint
스크립트를 백그라운드에 넣을 수 없다는 점에 유의하시기 바랍니다 sleepyhead
. 이렇게 하면 sleepyhead
종료 시 프로세스가 종료됩니다.
#!/bin/bash
# This is /root/bin/trackpoint
echo "Start $0"
date
found=false
dir=""
# dirlist can look like:
# /sys/devices/platform/i8042/serio1/serio25/speed
# /sys/devices/platform/i8042/serio1/serio24/speed
# ...the older one appears to get cleaned a little later.
sleep 1 # If I don't put this in here, my pointer locks up for a really long time...
for i in 1 2 3 4; do
speedfiles=$(find /sys/devices/platform/i8042 -name speed) # There may be multiple speed files at this point.
[ -z "$speedfiles" ] && { sleep 1; continue; }
dirlist=$(dirname $speedfiles)
printf "Speed file(s) at $(find /sys/devices/platform/i8042 -name speed | tail -1) \n"
# All this remaking of the path is here because the filenames change with
# every resume, and what's bigger: 9 or 10? ...Depends if you're
# lexicographical or numerical. We need to always be numerical.
largest_number="$(echo $dirlist | tr ' ' '\n' | sed -e 's/.*serio//' | sort -n | tail -1)"
dir="$(echo $dirlist | tr ' ' '\n' | egrep serio${largest_number}\$ )"
echo "Dir is $dir number is $largest_number"
[ -n "$dir" ] && found=true && break
done
$found || exit 1
date
echo -n 4 > $dir/inertia
echo -n 220 > $dir/sensitivity
echo -n 128 > $dir/speed
date
echo "Done $0"
답변4
기록만을 위해서:
루트로 특정 작업을 수행해야 하는 경우 사용자도 지정해야 합니다.
그리고 WantedBy=multi-user.target
시스템이 시작될 때 자동으로 실행되도록 하세요.
StandardOutput=syslog
더 이상 사용되지 않으며 안전하게 생략할 수 있습니다.
StandardOutput=journal
새로운 기본값입니다.
다음은 시작 시와 대기 모드에서 돌아올 때 볼륨을 음소거하는 예입니다.
[Unit]
Description=Mute Audio on Startup and on resume from standby
After=sleep.target
[Service]
User=root
Type=oneshot
ExecStart=/usr/bin/amixer -D pulse sset Master mute
TimeoutSec=0
[Install]
WantedBy=multi-user.target sleep.target