Назад | Перейти на главную страницу

Почему я не могу прикрепить сеанс экрана

У меня запущен сеанс экрана, который я хотел бы: выйти, но не могу, потому что, когда я пытаюсь повторно подключиться, я получаю сообщение об ошибке, говорящее, что он не может открыть мой терминал. Я уверен, что смогу убить демона или что-то в этом роде, но мне нужно узнать «правильный» способ, а также то, что на самом деле происходит.

 daniel@DELIRIUM:~/server1/bin/plugins$ screen -list
 There is a screen on:
        1424.pts-0.DELIRIUM     (06/23/2011 01:18:14 PM)        (Detached)
 1 Socket in /var/run/screen/S-daniel.

 daniel@DELIRIUM:~/server1/bin/plugins$ screen -r 1424
 Cannot open your terminal '/dev/pts/0' - please check.

Кроме того, что такое розетка? Чем больше вы сможете сделать это, тем лучше.

По какой-то причине у вас нет TTY. Ты использовал su изменить на этого пользователя другого пользователя? Обычно TTY принадлежит человеку, который изначально входит в этот терминал.

Есть хитрый трюк, чтобы исправить это (кроме изменения разрешений для файла / dev / pts / 0 пользователем, который изначально вошел в систему), bsdutils в пакете есть программа под названием script который при запуске действует как кейлоггер, сохраняя и то, что вы набираете, и то, что печатают программы. Он запускает другую оболочку и выделяет другую псевдотерминал для этой оболочки, чтобы записать все это, поэтому, если вы запустите script /dev/null он создаст новую псевдотерминал с соответствующими разрешениями и начнет записывать все на ней в / dev / null. После этого вы сможете использовать screen для повторного подключения сеанса.

Что касается «сокетов», это экранный термин для именованных файлов каналов (также известных как FIFO) в /var/run/screen/S-username, например

prw------- 1 derf derf 0 Jun 23 22:42 30029.pts-0.server

Когда вы впервые запускаете экран, этот файл канала создается для подключения screen процесс, который вы используете для просмотра дисплеев с фоном screen процесс (обычно переименовывается SCREEN) программы фактически выполняются. Когда вы запускаете screen -r, запущенный процесс экрана открывает этот канал для взаимодействия с процессом фонового экрана.

Здесь происходит что-то странное. Не могли бы вы вставить вывод:

   ls -l /dev/pts/0
   id

Сокет в этом случае - это форма межпроцессного взаимодействия, это файл в файловой системе, который формирует канал между процессом и ... другими процессами. Итак, ваш экранный «клиент» обращается к другому запущенному экземпляру экрана, и вот как работает магия screen. Сокеты в Linux сбивают с толку, потому что традиционно люди думают, что слово сокет означает «сетевые сокеты». Эту концепцию сложно упростить, она вписывается в ряд других каналов межпроцессного взаимодействия, лучше всего объясняемых в книге «Расширенное программирование в среде UNIX».