Тонкий менеджер входа в систему :исправление для тонкой блокировки, чтобы дисплей не просыпался при движении мыши

But where do I put the w substitution flag if I'm using multiple commands and want the results wrote to a file?

Флаг wдолжен заканчиваться символом новой строки или должен быть последним элементом (, включая аргумент it )в сценарии sed. Если будут найдены пробелы, комментарии или точки с запятой, они будут включены в имя файла.

Не путайте флаг w, связанный с подстановкой команды s(s///w), и команду w. Они похожи, но флаг wиспользуется только в том случае, если выполняется замена. Обратите внимание, что команда wможет использоваться условно или безоговорочно в зависимости от сценариев использования sed ().

Примечание :опцияi(--in-place)не указана в POSIX.

Первый пример

prompt% sed -i.back -e "/$regex/w output" -e "/$regex/d" input

Второй пример

prompt% sed -i.back "/$regex/ {
w output
d;}" input

Кто-то может столкнуться с проблемой в вашем случае(см. ниже ), поскольку в одной и той же строке ввода выполняется несколько подстановок.

prompt% sed -n '4 { 
s/fox/wolf/w output
s/dog/bear/w output
}' input

Изменена только одна входная строка, но выходной файл содержит две строки.

The quick brown wolf jumps over the lazy dog
The quick brown wolf jumps over the lazy bear

Этот результат неудобен, поскольку вводит в заблуждение.

I want to write the whole output to the file, a copy of the original with the changes made.

Мое решение позволяет создать резервную копию исходного файла (input.back), применить изменения в исходном файле(input)и записать потенциальные замены в другой файл(output). Этот алгоритм использует команду w.

prompt% sed -i.back -nE '4!p       # print line except 4th
4!d                                # delete line except 4th
/fox|dog/!p                        # print line if no "fox" or no "dog"
/fox|dog/!d                        # don't delete line if "fox" or "dog"
s/fox/wolf/                        # substitution occurs if "fox"
s/dog/bear/                        # substitution occurs if "dog"
p                                  # if a substitution then print 4th line
w output' input                    # if a change then save 4th line in "output"

Команда /fox|dog/!dнемедленно запускает следующий цикл, если foxили dogне найдено (ни одно из них ). Поэтому, если ключевое слово не найдено, следующие команды (s///, p,w)для текущей строки не обрабатываются.

2
17.06.2021, 06:08
1 ответ

Движения мыши приводят к тому, что расширение DPMS на сервере X11 активирует монитор. Один из способов остановить это — отключить устройство мыши перед запуском slimlockи повторно -включить его после этого. Сначала найдите имя мыши, используя xinput --list. Для меня это было Logitech USB Optical Mouse.Затем вы можете отключить его с помощью

dev='Logitech USB Optical Mouse'
xinput --disable "$dev"

При возвращении из slimlockиспользуйте ту же команду с --enable.

Если вам нужно, чтобы мышь снова стала активной после того, как вы начнете использовать клавиатуру, например, чтобы щелкнуть какой-либо значок, вам потребуется опросить состояние монитора и заметить, когда он включается, что указывает на использование клавиатуры. Вы можете сделать это, скажем,

while xset q | grep -q 'Monitor is Off'
do sleep 15
done
xinput --enable "$dev"

Чтобы избежать немедленного обнаружения того, что монитор включен в начале, вы можете добавить подходящий спящий режим перед этим циклом.

2
28.07.2021, 11:24

Теги

Похожие вопросы