Насколько я могу думать, мы можем выполнить эти шаги для поддержания разрешения, как это, и скопируйте все файлы также.
$ cd <sourcedirectory>
$ tar -cvf <sourcedirectory.tar> .
$ cp <sourcedirectory.tar> <destinationdirectory>
$ tar -xvf <sourcedirectory.tar>
Я знаю, что это старый вопрос, но следующий файл модулей помог мне запустить скрипт при выходе из сна:
[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
, который заставляет его запускаться при выходе из сна, а не когда компьютер переходит в спящий режим.
В качестве альтернативы записи и включению файла модуля вы также можете поместить сценарий оболочки (или символическую ссылку на свой сценарий) в / lib / systemd / system-sleep /
.
Он будет вызываться перед переходом в режим сна / гибернации и во время возобновления.
Из man systemd-suspend.service
:
Непосредственно перед переходом в режим приостановки и / или гибернации системы systemd-suspend.service (и другие упомянутые модули, соответственно) {{ 1}} запустит все исполняемые файлы в / 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"
Дополнение к ответу 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
. Обратите внимание, что первый сон имеет решающее значение. Устройство настраивается каждый раз, когда открывается крышка, поэтому сначала оно не существует. Если я попытаюсь сделать что-нибудь, кроме сна, скрипту «сони» потребуется очень много времени для выхода, и мой указатель будет заморожен как минимум на 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"