Arch Linux Systemd не будет обнаруживать события гибернации [закрыто]

Si y solo si sus nombres de archivo son "buenos" y no contienen espacios en blanco o caracteres especiales (esp. caracteres glob ), la salida fácil es ejecutar sorten una sustitución de comando:

sox $(printf "%s\n" *.wav | sort -V) output.wav

El printfaquí funciona para poner nuevas líneas(\n)después de cada nombre de archivo.

(Como de costumbre, una expansión sin comillas como esa se interrumpirá si los nombres de los archivos tienen espacios o tabulaciones (, se dividirán en dos después de expandir $(...)); o líneas nuevas (se dividirán en dos antes desort); o caracteres globales (*?[], se expandirán a cualquier nombre de archivo coincidente ). Así que no hagas eso si no sabes que los nombres de los archivos son lo suficientemente buenos. Véase, por ejemplo.https://mywiki.wooledge.org/WordSplittingy ¿Cuándo es necesaria la cita doble -?

1
18.11.2018, 06:49
2 ответа

Я считаю, что ваше устройство должно объявить, что оно должно быть запущено до systemd-hibernate.service, которая является службой, которая фактически переводит систему в состояние гибернации.

(Я думаю, что если ваше устройство работает параллельно с systemd-hibernate.service, то вполне возможно, что система перейдет в спящий режим до того, как ваш скрипт запустится.)

Итак, замените Before=hibernate.target(, который вам не нужен, )на Before=systemd-hibernate.service. Кроме того, вам нужно указать systemd дождаться завершения выполнения скрипта, поэтому вам нужно добавить Type=oneshotв раздел [Service].

Я предполагаю, что ваше устройство тоже включено, так как это необходимо для того, чтобы hibernate.target вытащил его... Без его включения ничто не запустит его.

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

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

Правильный способ сделать это — использовать интерфейс ингибитора . На странице, описывающей этот механизм, блокировка экрана указана как одно из применений этого интерфейса :

.

A screen lock tool wants to bring up the screen lock right before suspend, and delay the suspend until that's complete. 

Короче говоря, вы регистрируете клиент шины D -и сообщаете systemd, что хотите получать уведомления, когда вот-вот произойдет переход в режим гибернации, а затем наблюдаете за сигналом PrepareForSleep()от шины D -, после чего вы можете заблокировать экран.

В идеале это должна делать сама экранная заставка, поэтому добавление туда поддержки было бы идеальным.

Если использование интерфейса ингибитора невозможно, то более простой способ выполнить сценарий перед приостановкой — поместить сценарий в папку /usr/lib/systemd/system-sleep/, а затем проверить переданные аргументы, чтобы увидеть, вызывается ли он перед переходом в режим гибернации. Это должно дать тот же эффект, который вы пытаетесь получить от сервисного модуля, но, вероятно, намного проще в настройке.

См. справочную страницу для systemd -hibernate.service для получения более подробной информации о том, как работают сценарии в system-sleep/.

0
28.01.2020, 00:23

На самом деле я понял, что мой ноутбук не переходит в спящий режим, потому что у меня нет раздела подкачки

0
28.01.2020, 00:23

Теги

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