В конфигурации по умолчанию stderr не буферизуется , а stdout буферизуется.
Таким образом, простейшее решение вашей проблемы
>&2
)Однако это не работает, потому что эта буферизация происходит в библиотеке C, внутри процесса. Если вы перенаправите их stdout на stderr, этот stderr также не будет буферизован.
Направляет их вывод в процесс, который считывает все, а затем записывает их построчно. Самым простым способом было бы
tool1 | while read; do echo "$REPLY"; done & tool2 | while read; do echo "$REPLY"; done
О «красивом» параллельном выполнении нескольких команд/скриптов здесь вы можете прочитать другой мой ответ.
К сожалению, то, как выходные данные процесса в основном буферизуются libc, т.е. это их внутренние дела, то, как они отображают свои выходные данные на write(1,...)
вызовы на уровне ядра. Это зависит от них. Не меняя их, мы не можем контролировать их вывод того, что они еще не написали.
В случае, если запись происходит с FILE*
механизмом libc, вам могут пригодиться функции setbuf (3)и fflush (3 ).
И в 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'