7

Я использую экран GNU для дистанционного программирования пары. Давайте назовем локальную учетную запись для удаленного пользователя «pairpair». У меня есть следующие строки в моем .screenrc:

multiuser on
acladd pairpair

Я запустил sudo chmod u+s /usr/bin/screen . Однако, когда удаленный пользователь пытается подключиться к моему экрану с помощью командной screen -r [my_account_name]/[pid_of_screen] я получаю следующее сообщение:

Attach attempt with bad pid(xxx)

PID, указанный в сообщении об ошибке, соответствует pid процесса экрана, запущенного удаленным пользователем. Процесс экрана удаленного пользователя зависает; мой сеанс экрана успешно продолжается после исчезновения сообщения об ошибке.

Я попытался использовать как встроенный screen/usr/bin/screen), так и screen доступный в MacPorts, но в обоих случаях я получаю одинаковую ошибку.

Это работало на OS X 10.5 (Leopard).

Я погуглил сообщение об ошибке, но большинство обращений связано с некоторой ошибкой BSD 2003 года или около того (которая была исправлена). Кто-нибудь еще видел такое поведение? У кого-нибудь есть идеи, как заставить работать многопользовательскую поддержку экрана в SL?

3 ответа3

4

Я не знаю, видите ли вы это по-прежнему, но я есть.

Screen использует вызов kill() с нулевым сигналом для проверки PID. Причиной проблемы является то, что kill() неожиданно завершается ошибкой с ошибкой EPERM. Это должно происходить только в том случае, если UID и EUID вызывающего процесса отличны от нуля и не совпадают с UID и EUID целевого процесса, соответственно.

В этом конкретном случае UID двух рассматриваемых процессов различаются, а унаследованные EUID обоих процессов равны нулю. Это было бы хорошо, но как часть проверки работоспособности PID, EUID обоих процессов устанавливается на UID, которому принадлежит сеанс экрана. В этом конкретном сценарии, даже если оба идентификатора EUID одинаковы, kill() по-прежнему завершается ошибкой с ошибкой EPERM.

Я подал ошибку 8965041 на bugreport.apple.com. Надеюсь, это правильный путь, чтобы исправить это.

В то же время я работаю над этой проблемой, компилируя свой собственный двоичный файл экрана, где я заставил CheckPid() вернуть 0.

1

Я использую сервер Snow Leopard и использую многопользовательский экран без проблем - я использую exec screen -xRR в моем .profile для запуска экрана, вместо того, чтобы использовать явные идентификаторы PID.

Это работает для вас? Если это так, то это проблема синтаксиса PID, а не самого многопользовательского экрана.

0

Я использую screen для дистанционного программирования пар. Мы пробовали некоторые решения для совместного использования экрана, такие как iChat, Skype и VNC. Для совместного использования текста отправлять пиксели (и читать и писать удаленно) немного излишне, особенно когда интернет-соединения ненадежны.

Поскольку в парном программировании уже много доверия (и тот факт, что у нас общий компьютер), ситуация имеет обходной путь:

  1. Создайте общую учетную запись пользователя (например, "сопряжение")
  2. Дайте этой учетной записи права администратора
  3. Добавьте открытые ключи для пользователей, с которыми я бы отдал пару

Удаленные пользователи теперь могут войти в SSH и присоединиться к сеансу экрана.

Спасибо wwalker в #screen на irc.freenode.net за помощь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .