Hallo Ubuntu-User!
Vielleicht haben einige von euch ein ähnliches Problem und können von meiner Lösungsbeschreibung profitieren.
Unter Ubuntu 10.04 werden standardmäßig keine Pseudo-Terminals (also z.B. /dev/ptyp0, /dev/ptyp1, ...) mehr angelegt. Dies kann die Verwendung von z.B. (kommerziell erworbenen) proprietären Programmen (konkret z. B. der inzwischen abgekündigten IDE "SNIFF++") verhindern. Vor einiger Zeit habe ich mich mit einem Problem hier gemeldet http://forum.ubuntuusers.de/topic/erstellen-von-dev-pty-unter-ubuntu-10-/ und bekam von Florian Diesch Hilfe, was das Erzeugen im User-Space betraf. Wie ich feststellen musste, war dies aber nur ein Teil der Miete, meine Applikation lief weiterhin nicht. 😢 Einige strace-Aufnahmen und ein Tipp von Robert Penz http://robert.penz.name/ beim letzten "Linux User Group Tirol"-Treffen brachten die Erleuchtung: Auch im Kernel müssen diese Pseudo-Terminals unterstützt werden! Nach einigem Recherchieren kam ich dann auf die Lösung; hier in geraffter Form:
Kontrolle, ob pty-Terminals im Kernel vorgesehen sind:
"y" zeigt, dass der Kernel darauf vobereitet ist, die Anzahl "0" jedoch, dass keine Terminals (von der Kernelseite) angelegt werden.
user@tux:~$ grep LEGACY_PTY /boot/config-$(uname -r) CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=0 user@tux:~
Änderung in /etc/default/grub:
# GRUB_CMDLINE_LINUX="" GRUB_CMDLINE_LINUX="pty.legacy_count=256
Es werden beim Booten 256 pty-Devices vorgesehen
Anschließend in der Kommandozeile als "root" neue Grub2-Konfiguration erstellen:
grub-mkconfig
Es wird noch keine Änderung an /boot/grub/grub.cfg durchgeführt, sondern nur der mögliche neue Stand angezeigt. Wenn Änderung passt (wieder als root):
update-grub
Pseudo-Terminal-Devices für den Zugriff aus dem User-Space erstellen:
Würde man die Devices in /dev erstellen, so wären sie nach dem nächsten Reboot weg. Sie müssen daher in /lib/udev/devices erstellt werden: Als "root":
root@tux:~ # cd /lib/udev/devices root@tux:/lib/udev/devices# /sbin/MAKEDEV -v pty create ptyp0 c 2 0 root:tty 0666 create ttyp0 c 3 0 root:tty 0666 create ptyp1 c 2 1 root:tty 0666 create ttyp1 c 3 1 root:tty 0666 [...] create ptyee c 2 254 root:tty 0666 create ttyee c 3 254 root:tty 0666 create ptyef c 2 255 root:tty 0666 create ttyef c 3 255 root:tty 0666 create ptmx c 5 2 root:tty 0666 root@tux:/lib/udev/devices#
Zugriffsrechte auf die Pseudo-Terminal-Devices einstellen:
Es gibt eine Datei /lib/udev/rules.d/50-udev-default.rules, hierin gibt es (unter anderem) die folgenden Einträge:
KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660" KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660"
Die Zugriffsrechte sind für "normale User" zu restriktiv. Diese Datei sollte aber nicht geändert werden! Daher Anlegen eines neuen Skripts, z.B.: /lib/udev/rules.d/90-pty-dsw.rules:
# 2011-01-18/wS+mL # Nachtraegliche Konvertierung der Zugriffsrechte von 0660 auf 0666 # für die Verwendung durch "normale User" KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0666" KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0666"
Anschließend in der Kommandozeile: reboot
Und nun läuft's! ☺
@Florian und Robert: Danke für eure Hinweise!
Werner