Portál AbcLinuxu, 4. května 2025 13:45
Program GNU screen obsahuje mnoho užitočných funkcií. Jedno z pomerne neznámych funkcií je multiužívateľský režim, ktorý umožňuje zdieľať jeden terminál medzi viacerými užívateľmi podobne ako VNC umožňuje zdieľať plochu. To môže byť užitočné pre množstvo situácií od streamovania až po extrémne programovanie.
Nástroj GNU Screen by mal byť štandardnou súčasťou väčšiny Linuxových distribúcií. Aby bolo možné aktivovať multiužívateľský režim musí byť nastavený suid (príkaz chmod u+s /cest/ku/screen
pod rootom).
Každý používateľ, ktorý chce pracovať so screenom musí byť vlastníkom tty zariadenia, v opačnom prípade skončíme s nasledujúcou hláškou. Preto GNU Screen štandardne nefunguje pod su
.
$ screen Cannot open your terminal '/dev/pts/x' - please check.
Globálne nastavenia screen-u sa nachádzajú v /etc/screenrc
. Užívateľské nastavenia sú v súbore ~/.screenrc
. Súbor obsahuje nastavenia screen-u vo forme príkazov bez úvodnej dvojbodky. V konfiguračnom súbore môžme neskôr povoliť multiužívateľský režim a nastaviť práva podobne, ako keby boli zadávané pri každom spustení.
V našom modelovom príklade bude chcieť Alica zdieľať svoj terminál Bobom. Alica potrebuje najskôr spustiť screen, v ktorom zapne multiužívateľský režim a povolí naň pripojenie Bobovi. Zadá preto nasledujúce príkazy.
Alica $ screen (screen) <CTRL-A>:multiuser on (screen) <CTRL-A>:acladd bob
Ak by chcela multiužívateľský režim povoliť pri každom spustení stačí aby do súboru .screenrc
pridala nasledujúce riadky.
multiuser on acladd bob
Následne sa môže Bob prihlásiť príkazom screen -x alica/
. To ale v našom prípade nebude fungovať pretože Alica je neporiadná a má pootváraných niekoľko inštancií screenu . V takom prípade potrebuje Bob zadať príkaz v tvare
screen -x užívateľ/pid.tty.hostname
. Zoznam spustených screenov zistí Bob príkazom screen -list alica/
.
Zisťovanie správneho pid-u je pomerne otravné, preto sa dohodnú na názve pre ich zdieľaný screen. Ten bude v našom ukážkovom príklade "bob
". Nasledujúcimi príkazmi spustí Alica a Bob screen.
Alica $ screen -S bob Bob $ screen -x alica/bob
Prepínač -x
povoľuje pripojenie sa k screenu, ktorý má už niekto iný pripojený. Práve popísaný postup umožní obom pripojeným stranám využívať terminál tak, že obaja vidia to isté a majú rovnaké práva.
V našom ďalšom príklade bude chcieť Alica ukázať príklad triede študentov. Študenti sú však zlomyseľní a vieme ako by to dopadlo . Pre takéto prípady obsahuje screen systém práv (acl). Alica si teda odoberie práva na zápis a spúšťanie príkazov celej skupine študentov.
V konfiguračnom súbore .screenrc
si najskôr vytvorí skupinu studenti
. Práva pre užívateľa, alebo skupinu sa menia príkazom aclchg skupina/užívateľ práva zoznam
. Práva sú rovnaké, ako ich poznáme z *nixového príkazu chmod (r - čítanie, w - zápis, x - spustenie). Posledným parametrom je zoznam objektov / operácií, na ktoré sa práva vzťahujú. Špeciálny znak "#" reprezentuje všetky okná a "?" reprezentuje všetky príkazy. Príkazmi aclchg
odoberie práva na zápis a spúšťanie študentom vo všetkých oknách a zároveň odoberie práva na spúšťanie akýchkoľvek príkazov screenu. Nakoniec povolí odpojenie sa od screenu (príkaz detach
).
Užívatelia sa zaraďujú do skupiny príkazom aclgrp
. Takto môže ovládať celú skupinu bez nutnosti určovať práva individuálne.
Použité príkazy mali vplyv len na funkcie samotného screen-u. Pre obmedzenie prístupu v okne použije príkaz aclumask
. V tomto prípade odoberie akékoľvek práva všetkým užívateľom (-rwx
), povolí všetky práva sebe (alica+rwx
) a povoli práva na čítanie pre študentov (studenti+r-wx
). Špeciálne užívateľské mená "?" a "??" určujú práva pre neznámych užívateľov pre ľubovoľné okná ("?") a príkazy ("??").
aclchg studenti aclchg studenti +r-wx "#" aclchg studenti -rwx "?" aclchg studenti +x detach aclgrp student1 studenti aclgrp student2 studenti aclumask -rwx alica+rwx studenti+r-wx "?"-rwx "??"-rwx
Následne môže Alica spustiť screen a počkať na pripojenie študentov.
Alica $ screen -S student Student1 $ screen -x alica/student
Screen je možné okrem obmedzenia na konkrétnych užívateľov chrániť aj heslom. Prihlasovanie heslom sa aktivuje príkazom <CTRL-A>:acladd užívateľ šifrované_heslo
. Zašifrované heslo pre screen sa dá vygenerovať príkazom <CTRL-A>::password
a zadaním hesla. Po dvojnásobnom zadaní hesla sa však zašifrované heslo nikde nevypíše. Namiesto toho sa vloží do kopírovacieho bufferu screenu. Vypísať do aktuálneho okna sa dá príkazom <CTRL-A>:paste .
(aj s bodkou, tá totiž označuje kopírovací buffer).
Dnes sme si ukázali jednu z nie moc známych, ale pomerne užitočných funkcií screen-u. Dokumentácia takýchto nástrojov často skrýva funkcie, ktoré čakajú na svojich objaviteľov. Dúfam, že som Vás navnadil na objavovanie nových neprebádaných končín dokumentácie a prajem príjemnú zábavu pri rozširovaní vedomostí .
Tiskni
Sdílej:
Já jsem se screen nikdy nenaučil (prostě jsem si ty zkratky nemohl zapamatovat ani za boha). Ale tím jak tmux má ovládání podobný vimu, tak jsem ho začal používat a je to silně návykový teda. Ještě v kombinaci s https://github.com/aziz/tmuxinator je to paráda.
Příklad:
project_name: Dev
project_root: /home/retro/work/dev
tabs:
- shell: google-chrome "http://localhost:3000/"; gvim .
- server: rails s
- mongo: sudo mongod
Mám na to i alias. Takže stačí napsat p cs (p - alias na tmuxinator, cs - jméno kofiguráku v ~/.tmuxinator) a pustí se mi vše co potřebuju.
Jinak sdílení umí tmux taky.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.