Portál AbcLinuxu, 4. května 2025 13:45

Zdieľaný terminál cez screen

8.12.2012 14:45 | Přečteno: 2479× | Linux | Výběrový blog | poslední úprava: 8.12.2012 14:42

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.

Inštalácia a nastavenie

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í.

Použitie multiužívateľského režimu

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.

Nastavenie práv

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

Ochrana heslom

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í ;-).

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

pavlix avatar 8.12.2012 15:02 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Zdieľaný terminál cez screen
Odpovědět | Sbalit | Link | Blokovat | Admin
Mimochodem, Gentooisti mě hrozně moc překecávali k přechodu na tmux.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
8.12.2012 22:35 retroslava | skóre: 9 | blog: TryCatch | Žižkoff
Rozbalit Rozbalit vše Re: Zdieľaný terminál cez screen

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.

Pozor! Jsem naprostý idiot. Co jsem napsal včera dnes už dávno neplatí. Zavazuji se, že budu diskutovat nezávazně.
mirec avatar 9.12.2012 08:35 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Zdieľaný terminál cez screen
Hmm, to znie pre mňa ako vim-istu celkom zajjímavé, musím vyskúšať, dík za tip.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
krab1k avatar 9.12.2012 21:57 krab1k | skóre: 11 | Brno
Rozbalit Rozbalit vše Re: Zdieľaný terminál cez screen
Odpovědět | Sbalit | Link | Blokovat | Admin
Ten vim vypadá docela zajímavě. Mohl by ses podělit o konfigurák?
mirec avatar 10.12.2012 07:59 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Zdieľaný terminál cez screen
Samozrejme, tu je.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
rADOn avatar 10.12.2012 17:06 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Zdieľaný terminál cez screen
Odpovědět | Sbalit | Link | Blokovat | Admin
Skoda blogu, tohle je material na clanek. Akorat jsem z toh nejak nepochopil, jestli si jen uzivatele vidi navzajem screeny nebo jestli i muzou pouzivat stejnou screenu najednou.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
mirec avatar 10.12.2012 22:33 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Zdieľaný terminál cez screen
Je to podobné ako VNC, tj môžu mať zobrazený presne ten istý terminál hoc druhý partner je vzdialene pripojený cez ssh s pomalým dialupom. Právami sa dá obmedziť práva jednotlivých pripojených užívateľov tak, aby niektorí napr. mali právo len na pozeranie. Štandardne každý účastník môže aj zapisovať.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
11.12.2012 16:53 cita
Rozbalit Rozbalit vše Re: Zdieľaný terminál cez screen
Odpovědět | Sbalit | Link | Blokovat | Admin
jak nastavit vim aby vypadal tak pekne sipkovite jako ten tvuj?

diky moc za tip
mirec avatar 11.12.2012 18:48 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Zdieľaný terminál cez screen
V podstate by mali stačiť tieto príkazy, čo mám zverejnené tu + opatchovať fonty, viac o patchovaní v dokumentácii k vim-powerline.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.