Шифрование мультимедийных файлов с помощью GPG

Вы обнаружили ошибку. И при этом неприятный.

Семейство команд макета , похоже, зависит от управляющего терминала (для работы команды должен присутствовать TTY или PTS). Я могу воспроизвести проблему, не просматривая crontab :

Я добавляю следующее к моему .screenrc :

layout new lay1
split -v
layout new lay2
split -v
layout attach lay2

Запуск экран напрямую дает мне макет :

screen

Но выполнение следующего не может найти макеты :

screen -dm && screen -r

В последней команде я все еще могу перечислить макеты, используя : layout show , но, черт возьми, теперь это когда ошибка становится неприятной. Если я попытаюсь изменить макет (с помощью : layout next или : layout prev ), экран попадет в бесконечный цикл.

Более того, поскольку двоичный файл screen в моей системе является корнем SUID (мне нужна многопользовательская поддержка), ошибка становится еще хуже. После того, как пользовательский процесс был убит, корневой процесс запускает бесконечный цикл и в конечном итоге дает сбой. Возможность сбоя процесса SUID или даже просто возможность создания нескольких корневых процессов, высасывающих ресурсы ЦП в бесконечных циклах, очень опасна.

Я тестировал его на вашей версии экрана (4.3.0), а также на 4.5.0 (последняя версия), где ошибка все еще существует. Я собираю исходный код с помощью -DDEBUG и сообщаю об ошибке команде разработчиков screen. Экран -DDEBUG дает сбой:

ASSERT(l->l_cvlist != cv) failed file canvas.c line 294

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

Экран обходного пути

позволяет привязать метод eval . Поэтому вы можете добавить в свой .screenrc что-то вроде:

bind g eval 'layout new default' 'split -v' 'resize 60%' 'split -h' 'layout select default'

Хакерская часть состоит в том, что должен быть в одной строке, screen не имеет никакого способа экранировать длинные строки в .screenrc . Затем вы можете получить макет одним (а точнее, двойным) нажатием клавиши после выхода на экран ( Ctrl + a g ).

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

2
07.10.2015, 03:00
0 ответов

Теги

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