Wechselt man, etwa mit "sudo -s -u heinz" in den Benutzeraccount "heinz", bekommt man beim Aufruf des Befehls "screen" die Fehlermeldung "Cannot open your terminal '/dev/pts/0' - please check" zu sehen. Wer versucht, mit "strace" dem Problem auf die Spur zu kommen, sieht damit auch prompt, dass die nötigen Rechte für das Pseudo-Terminal (PTY) fehlen:
open("/dev/pts/0", O_RDWR|O_NONBLOCK) = -1 EACCES (Permission denied)
Selbst ein Sudo-Login mit "-i" (Simulate Initial Login) hilft hier nicht weiter. Ein einfacher Workaround besteht darin, vor "screen" das Programm "script" aufzurufen, dass die Pseudoterminals mit passenden rechten neu einrichtet. "script" zeichnet normalerweise die aktuelle Sitzung auf, aber da dies nicht nötig ist, genügt es das Programm mit dem Argument "/dev/null" aufzurufen: "script /dev/null". Nun funktioniert auch "screen".
Wenn man die Situation genauer untersucht, stellt man fest, dass die Rechte der Pseudoterminals nicht passen:
$ su -s -u heinz $ ls -l /dev/pts insgesamt 0 crw--w---- 1 oliver tty 136, 0 Jul 6 10:33 0 crw--w---- 1 root tty 136, 2 Jul 2 09:42 2 crw--w---- 1 root tty 136, 4 Jul 2 09:42 4 crw--w---- 1 root tty 136, 5 Jul 2 09:42 5 c--------- 1 root root 5, 2 Jul 2 09:33 ptmx
Nach dem Ausführen von "script" sieht dasselbe Verzeichnis so aus:
crw--w---- 1 oliver tty 136, 0 Jul 6 10:33 0 crw--w---- 1 heinz tty 136, 1 Jul 6 10:33 1 ...
Es gibt also ein neues PTY mit der Nummer 1, das dem aktuellen Sudo-Benutzer gehört. Dass das Screen-Kommando es findet, liegt daran, dass "script" auch einen Symlink auf "/proc/self/fd/0" anlegt.