Когда подходящее время для запуска Redshift с помощью выскочки?

Без -t , sshd получает стандартный вывод удаленной оболочки (и дочерние элементы, такие как sleep ) и stderr через два канала ( а также отправляет клиентский ввод через другой канал).

sshd действительно ждет процесса, в котором он запустил оболочку входа пользователя, но также, после того, как этот процесс завершится, ждет eof на конвейере stdout (не на конвейере stderr, по крайней мере, в случае openssh) .

И eof происходит, когда нет дескриптора файла ни одним процессом, открытым на стороне записи канала, что обычно происходит только тогда, когда все процессы, которые не перенаправили свой стандартный вывод на что-то еще, ушли.

Когда вы используете -t , sshd не использует каналы. Вместо этого все взаимодействие (stdin, stdout, stderr) с удаленной оболочкой и ее дочерними элементами выполняется с использованием одной пары псевдотерминалов.

С парой псевдотерминалов для sshd , взаимодействующего с ведущей стороной, нет аналогичной обработки eof, и хотя по крайней мере некоторые системы предоставляют альтернативные способы узнать, есть ли еще процессы с открытыми fds для подчиненная сторона псевдотерминала (см. комментарий @JdeBP ниже), sshd не использует их, поэтому просто ожидает завершения процесса, в котором он выполнил оболочку входа в систему удаленного пользователя и затем уходит.

После этого выхода ведущая сторона пары pty закрывается , что означает, что pty уничтожается, поэтому процессы, контролируемые ведомым устройством, получат SIGHUP (который по умолчанию завершит их).

Правка : последняя часть была неправильной, хотя конечный результат тот же. См. @ pynexj answer для правильного описания того, что именно происходит.

6
13.04.2017, 15:22
1 ответ

Чтобы избежать световой dm-заморозки.

Причина в том, что & не передаются в оболочку, а передаются в красное смещение в качестве параметра (для проверки посмотрите на ps -aux). Чтобы решить эту проблему, создайте скрипт, например.

redshift -c  /etc/redshift.conf &

в /root/bin/redshift.sh. Chmod 755 и отредактируйте /etc/lightdm/lightdm.conf.d/90-redshift.conf, чтобы он содержал

[Seat:*]
display-setup-script=/root/bin/redshift.sh

([Seat:*] кажется новым [SeatDefaults]).

1
27.01.2020, 20:28

Теги

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