Отключить экранную заставку во время установки/начальной настройки

1. Плохое решение

В конфигурации по умолчанию stderr не буферизуется , а stdout буферизуется.

Таким образом, простейшее решение вашей проблемы

  1. обеспечить, чтобы используемые инструменты записывали все строки -на -строки
  2. перенаправить их вывод в stderr(>&2)

Однако это не работает, потому что эта буферизация происходит в библиотеке C, внутри процесса. Если вы перенаправите их stdout на stderr, этот stderr также не будет буферизован.

2. Лучшее решение

Направляет их вывод в процесс, который считывает все, а затем записывает их построчно. Самым простым способом было бы

tool1 | while read; do echo "$REPLY"; done & tool2 | while read; do echo "$REPLY"; done

О «красивом» параллельном выполнении нескольких команд/скриптов здесь вы можете прочитать другой мой ответ.

3. Действительное решение

К сожалению, то, как выходные данные процесса в основном буферизуются libc, т.е. это их внутренние дела, то, как они отображают свои выходные данные на write(1,...)вызовы на уровне ядра. Это зависит от них. Не меняя их, мы не можем контролировать их вывод того, что они еще не написали.

В случае, если запись происходит с FILE*механизмом libc, вам могут пригодиться функции setbuf (3)и fflush (3 ).

0
07.11.2019, 14:22
1 ответ

И в gsettings, и в dconf должен быть активен DBus.

Думаю, это может работать так (хотя не проверялось):

[Unit]
Description=Disable screen blanking
[Service]
Type=dbus
Busname=org.example.ssoff
ExecStart=/usr/bin/gsettings set org.gnome.desktop.session idle-delay 0
[Install]
WantedBy=graphical.target

Также доступноdconf write /org/gnome/desktop/session/idle-delay 'uint32 0'

0
28.01.2020, 03:08

Теги

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