Gemäß dieser Anleitung auf dem Multiuser-Bildschirm gibt es derzeit keine Schnittstelle zu den internen ACLs von Screen. Dies stimmt mit dem Screen-Handbuch überein ; Weder die Abschnitte Commands noch Multiuser Session enthalten weitere Befehle, die sich auf die ACL beziehen. Hier ist die vollständige Liste:
- acladd - Fügt Benutzer mit voller Berechtigung allen Fenstern hinzu.
- aclchg - Fügt Benutzer mit flexibleren Berechtigungen hinzu oder ändert die Berechtigungen für einen vorhandenen Benutzer.
- acldel - Entfernt einen Benutzer vom Bildschirmwissen.
- aclgrp - Fügt einen Benutzer einer Gruppe hinzu oder beschreibt nur die Gruppenmitgliedschaft des Benutzers.
- aclumask - Legt Standardberechtigungen für noch nicht erstellte Fenster fest.
- defescape - Wie Escape, legt aber das Befehlszeichen für alle Benutzer fest.
- defwritelock - Legt die Standardeinstellung für Writelock für neue Fenster fest.
- Mehrbenutzer - Aktiviert oder deaktiviert den Mehrbenutzermodus.
- su - Als anderer Benutzer arbeiten.
- writelock - Legt den Writelock-Modus für das aktuelle Fenster fest.
Ich bin nicht vertraut mit den Internen von Screen. Wenn Sie jedoch auf andere als diese Befehle zugreifen möchten, müssen Sie die Quelle direkt überprüfen . Ihr Projekt scheint sich als sehr vorteilhaft für die Screen-Community zu erweisen. Ich wünsche Ihnen viel Erfolg bei der Umsetzung.
Wenn Sie sich das anschauen src/acls.h
, sehen Sie die Strukturen aclusergroup
und acluser
; Es gibt auch eine Struktur acl
in src/screen.h
. Dies sind die grundlegenden Datenstrukturen. Es scheint, als seien Screen-ACLs im Wesentlichen eine verknüpfte Liste von aclusergroup
Knoten, wobei der acluser
Knoten die meisten der interessanten Daten enthält.
src/acls.c
enthält den ACL-Manipulationscode; beispielsweise die acladd
und aclchg
werden Befehle sowohl von der Funktion verarbeitet UserAcl()
(Zeile 864).
Die Struktur sieht so aus:
/* in screen.h */ struct acl { struct acl *next; char *name; }; /* in acls.h */ /* * How a user joins a group. * Here is the node to construct one list per user. */ struct aclusergroup { struct acluser *u; /* the user who borrows us his rights */ struct aclusergroup *next; }; /* ... */ /* * A User has a list of groups, and points to other users. * users is the User entry of the session owner (creator) * and anchors all other users. Add/Delete users there. */ typedef struct acluser { struct acluser *u_next; /* continue the main user list */ char u_name[20+1]; /* login name how he showed up */ char *u_password; /* his password (may be NullStr). */ int u_checkpassword; /* nonzero if this u_password is valid */ int u_detachwin; /* the window where he last detached */ int u_detachotherwin; /* window that was "other" when he detached */ int u_Esc, u_MetaEsc; /* the users screen escape character */ #ifdef COPY_PASTE struct plop u_plop; /* internal copy-paste buffer */ #endif #ifdef MULTIUSER int u_id; /* a uniq index in the bitfields. */ AclBits u_umask_w_bits[ACL_BITS_PER_WIN]; /* his window create umask */ struct aclusergroup *u_group; /* linked list of pointers to other users */ #endif } User;
Der ACL-Code scheint bei der Kompilierung des Bildschirms enthalten zu sein MULTIUSER
(obwohl ich nicht sicher bin, ob dies in der Befehlszeile oder in einer anderen Header-Datei definiert ist). Wenn Sie also nach diesem Schlüsselwort suchen, können Sie bestimmten Mehrbenutzer-Code finden.