LXF136:Screen

Материал из Linuxformat.

Перейти к: навигация, поиск
Screen Словосочетание «терминал “все в одном”» приобретает новый смысл.

Содержание

Screen: Кон­соль по-но­во­му

Чем тер­ми­нал не ра­бо­чий стол? Раз­ме­ры те же, фон мож­но на­стро­ить, и да­же окон­ный ме­нед­жер есть, со­об­ща­ет Ти­хон Тар­нав­ский.

Про­грам­ма, о ко­то­рой пой­дет речь, опи­са­на на ее до­машней странице как «окон­ный менед­жер для тер­ми­на­ла» – ви­ди­мо, из скром­но­сти: функ­цио­нал Screen ку­да ши­ре. На де­ле за этим бес­хит­ро­ст­ным на­званием (англ. screen – эк­ран) кро­ют­ся та­кие воз­мож­но­сти, что по­ка не оп­ро­бу­ешь, их труд­но да­же во­об­ра­зить. Конеч­но, все их ох­ва­тить од­ной стать­ей невоз­мож­но: пол­ная офи­ци­аль­ная до­ку­мен­та­ция про­грам­мы по объ­е­му пре­восхо­дит весь этот но­мер жур­на­ла. По­это­му по­сле опи­сания неко­то­рых ба­зо­вых ве­щей оста­но­вим­ся лишь на са­мых по­лез­ных и да­же в ка­ких-то слу­ча­ях спа­си­тель­ных спо­соб­но­стях Screen – а их то­же нема­ло.

На­ча­ли! Э… мы уже на­ча­ли?

Рис. 1 Рис. 1. Стар­то­вое при­вет­ст­вие Screen, ес­ли оно не от­клю­че­но в на­строй­ках, вы­гля­дит так.

Од­на из основ­ных осо­бен­но­стей Screen в том, что он «не пу­та­ет­ся у вас под но­га­ми». С непри­выч­ки это мо­жет да­же немно­го обеску­ра­жить: ес­ли в на­строй­ках Screen не за­да­но ото­бра­жать ин­фор­ма­цию о про­грам­ме при за­пуске (рис. 1), вы мо­же­те это­го за­пуска и во­все не за­ме­тить. Скоман­до­вав screen, вы уви­ди­те… при­гла­шение команд­ной стро­ки – точ­но та­кое же, как до вво­да этой коман­ды.

Но на са­мом де­ле мы уже внут­ри: по умол­чанию Screen за­пуска­ет в сво­ем пер­вом окне ва­шу стан­дарт­ную команд­ную обо­лоч­ку. Мы мо­жем про­ве­рить это, дав ему ка­кую-нибудь коман­ду; но пре­ж­де, чем пе­ре­хо­дить к кон­кре­ти­ке, сто­ит по­зна­ко­мить­ся с кон­цеп­ци­ей, на ко­то­рой стро­ят­ся коман­ды Screen. Она до­воль­но свое­об­раз­на и про­дик­то­ва­на в пер­вую оче­редь уже оз­ву­чен­ным прин­ци­пом «не пу­тай­ся под но­га­ми». Гру­бо го­во­ря, управ­ляю­щая кла­ви­ша у Screen все­го од­на. На­жа­тие на нее как бы пе­ре­клю­ча­ет Screen в команд­ный ре­жим (при­вет лю­би­те­лям Vi!): соб­ствен­но коман­дой бу­дет уже сле­дую­щая кла­ви­ша.

На прак­ти­ке та­кой под­ход ока­зы­ва­ет­ся очень удоб­ным. Дей­стви­тель­но, с од­ной сто­ро­ны Screen минималь­но вме­ши­ва­ет­ся в управ­ление лю­бой ра­бо­таю­щей внут­ри него про­грам­мы, а с дру­гой – пульт управ­ления са­мим Screen досту­пен бу­к­валь­но в од­но ка­сание.

Те­перь да­вай­те про­дол­жим, а по хо­ду дей­ствия бу­дем с этим пуль­том зна­ко­мить­ся.

И прав­да на­ча­ли

Ро­до­слов­ная

Screen раз­ра­ба­ты­ва­ет­ся в рам­ках про­ек­та GNU. По­это­му час­то его для од­но­знач­но­сти на­зы­ва­ют GNU Screen (осо­бен­но в анг­лоя­зыч­ной ли­те­ра­ту­ре). Стра­ни­ца про­грам­мы, как не­труд­но до­га­дать­ся, рас­по­ло­же­на на сай­те GNU: http://www.gnu.org/software/screen/.

Мы оста­но­ви­лись на же­лании убе­дить­ся, что Screen уже ра­бо­та­ет. Опи­сан­ная кла­ви­ша-пре­фикс по умол­чанию – это Ctrl+a, а на вклю­чае­мом ею «пуль­те управ­ления Screen» той же кла­ви­ше со­от­вет­ству­ет од­на из са­мых по­пу­ляр­ных команд – пе­ре­клю­чение на пре­ды­ду­щее ак­тив­ное ок­но. Сра­зу сде­ла­ем неболь­шое от­сту­п­ление на­счет запи­си со­че­таний кла­виш: в до­ку­мен­та­ции к Screen со­че­тания ви­да Ctrl+a обо­зна­че­ны как ^A ли­бо C-a. Мы бу­дем при­дер­жи­вать­ся вто­ро­го ва­ри­ан­та.

Тут сто­ит упо­мя­нуть еще од­ну осо­бен­ность: боль­шин­ство кла­виш оз­на­ча­ют од­но и то же как с Ctrl, так и са­ми по се­бе. Это сде­ла­но для то­го, что­бы по­ве­дение про­грам­мы не ме­ня­лось от то­го, от­пусти­ли ли вы Ctrl по­сле на­жа­тия C-a.

Итак, два­ж­ды на­жми­те C-a. В нижней стро­ке тер­ми­на­ла поя­вит­ся со­об­щение «No other window» [Нет дру­го­го ок­на], вы­де­лен­ное ин­верс­ным цве­том и фо­ном. Эта возникаю­щая внизу ин­верс­ная об­ласть – ста­тусная стро­ка Screen; мы еще не раз коснем­ся ее в дальней­шем опи­сании про­грам­мы.

Для соз­дания но­во­го ок­на есть два спо­со­ба. Пер­вый – кла­ви­ша на «пуль­те», а имен­но C-a c (или C-a C-c). Но в та­ком окне за­пустит­ся команд­ная обо­лоч­ка; а та­кое у нас уже есть. По­то­му пе­рей­дем сра­зу ко вто­ро­му спо­со­бу.

Вы­зов screen в команд­ной стро­ке внут­ри сес­сии соз­даст в ней но­вое ок­но. По умол­чанию оно так­же бу­дет со­дер­жать команд­ную обо­лоч­ку; но коман­де, в от­ли­чие от со­че­тания кла­виш, мож­но пе­ре­дать па­ра­мет­ры. В про­стей­шем слу­чае – при вы­зо­ве с од­ним па­ра­мет­ром – он воспринима­ет­ся как имя коман­ды, ко­то­рую требуется за­пустить в но­вом окне вме­сто обо­лоч­ки. Да­вай­те для про­бы за­пустим там top:

$ screen top

Ну как? Всё сно­ва вы­гля­дит так, буд­то нет у нас ника­ко­го «окон­но­го менед­же­ра», и это пра­виль­но: Screen сам не де­лит тер­ми­нал на об­ласти, а от­кры­ва­ет лю­бое свое ок­но в «пол­но­эк­ран­ном» ре­жи­ме. Что­бы убе­дить­ся в этом, сно­ва на­жми­те C-a C-a: вы ока­же­тесь в пер­во­на­чаль­ном окне с обо­лоч­кой. И коман­да screen top там при­сут­ству­ет, на­по­ми­ная нам о по­следнем дей­ствии в этом окне. Мо­же­те вво­дить дру­гие коман­ды или соз­да­вать но­вые ок­на – top при этом бу­дет про­дол­жать ра­бо­тать, и вы смо­же­те пе­ре­клю­чить­ся на него в лю­бой мо­мент. Когда вы вый­де­те из top, со­дер­жа­щее его ок­но ав­то­ма­ти­че­ски за­кро­ет­ся.

У это­го вто­ро­го спо­со­ба за­пуска есть еще один ва­ри­ант: с по­мо­щью внут­ренней коман­ды Screen. На­жми­те C-a: – в ста­тусной стро­ке поя­вит­ся при­гла­шение в ви­де двое­то­чия. Это команд­ная стро­ка Screen, здесь мож­но вво­дить его внут­ренние коман­ды.

Коман­да соз­дания но­во­го ок­на на­зы­ва­ет­ся screen и принима­ет та­кие же па­ра­мет­ры. Дру­ги­ми сло­ва­ми, здесь мож­но бы­ло вве­сти «screen top» и по­лу­чить иден­тич­ный ре­зуль­тат. По­про­буй­те за­пустить та­ким об­ра­зом что-нибудь еще – на­при­мер, тек­сто­вый ре­дак­тор:

: screen emacs

(ес­ли вы предпочитаете не Emacs, за­мените по сво­ему вку­су: vim, nano, mcedit…)

По­лу­чи­лось? От­лич­но. Но как те­перь по­пасть в пер­во­на­чаль­ное ок­но с команд­ной обо­лоч­кой? На­жа­тие C-a C-a пе­ре­клю­ча­ет нас ме­ж­ду top и ре­дак­то­ром. По­ра изу­чить дру­гие спо­со­бы пе­ре­клю­чения окон.

Ещё боль­ше окон

Рис. 2 Рис. 2. Под­сказ­ка Screen по но­ме­рам и име­нам окон.

Для пе­ре­клю­чения ме­ж­ду бо­лее чем дву­мя ок­на­ми в Screen то­же есть несколь­ко раз­лич­ных спо­со­бов. Са­мый ла­конич­ный из них – по но­ме­ру ок­на. Стро­го го­во­ря, это де­сять от­дель­ных команд, ко­то­рым по умол­чанию со­от­вет­ству­ют кла­ви­ши от ну­ля до де­вя­ти. Ноль – это то ок­но, ко­то­рое возник­ло при пер­во­на­чаль­ном за­пуске Screen; даль­ше – на­чи­ная с единицы, в по­ряд­ке соз­дания. Конеч­но, эту умол­ча­тель­ную ну­ме­ра­цию при же­лании мож­но лег­ко из­менить, но об этом чуть поз­же. По­ка нам важ­но, что мы мо­жем пе­ре­клю­чать­ся ме­ж­ду тре­мя уже су­ще­ствую­щи­ми ок­на­ми: C-a 0 – команд­ная обо­лоч­ка; C-a 1top; C-a 2 – тек­сто­вый ре­дак­тор.

Но что де­лать, ес­ли вы за­бы­ли но­ме­ра окон или во­об­ще не хо­ти­те дер­жать их в го­ло­ве? Опять-та­ки вы­бор есть. Мож­но пе­ред пе­ре­клю­чением по но­ме­ру вы­вести в ста­тусную стро­ку ра­зо­вую под­сказ­ку с но­ме­ра­ми окон и их за­го­лов­ка­ми (рис. 2) на­жа­ти­ем C-a w (от сло­ва window – ок­но); звез­доч­кой в этом спи­ске обо­зна­че­но ак­тив­ное ок­но. А мож­но пе­рей­ти к дру­гим спо­со­бам вы­бо­ра ок­на. Сде­ла­ем толь­ко неболь­шое от­сту­п­ление о за­го­лов­ках окон, тем бо­лее, что и при рас­смот­рении осталь­ных спо­со­бов пе­ре­клю­чения они нам по­на­до­бят­ся.

Ка­ж­дое ок­но в Screen име­ет за­го­ло­вок. По умол­чанию, как мы уже ви­де­ли в при­ме­ре вы­ше, та­ким за­го­лов­ком ста­но­вит­ся имя коман­ды, ра­бо­таю­щей в этом окне. Но его лег­ко мож­но за­менить сво­им, как, впро­чем, и лю­бое дру­гое умол­чание в Screen; при­чем то­же не одним спо­со­бом. Пер­вый спо­соб по­зво­ля­ет за­дать дру­гой за­го­ло­вок пря­мо при за­пуске – с по­мо­щью клю­ча -t к коман­де screen (он досту­пен как из обо­лоч­ки, так и из внут­ренней команд­ной стро­ки Screen):

screen -t за­го­ло­вок_ок­на ко­ман­да

А вто­рой пред­на­зна­чен для из­менения за­го­лов­ков уже су­ще­ствую­щих окон и по­то­му «при­вя­зан» к функ­цио­наль­ной кла­ви­ше. Пе­ре­клю­чи­тесь на нуж­ное ок­но и на­жми­те C-a A (Ctrl-a Shift-a); в ста­тусной стро­ке поя­вит­ся по­яснение «Set window's title to:» («уста­но­вить за­го­ло­вок ок­на в:») и за­тем те­ку­щий за­го­ло­вок, ко­то­рый мож­но от­ре­дак­ти­ро­вать или за­менить но­вым.

Вернем­ся к пе­ре­клю­чению окон. Вто­рой спо­соб – вы­бор из спи­ска. По на­жа­тию C-a “ поя­вит­ся таб­лич­ка из трех ко­ло­нок (рис. 3): но­мер ок­на (Num), его за­го­ло­вок (Name) и некие «фла­ги» (Flags; сей­час они для нас ин­те­ре­са не пред­став­ля­ют). Те­перь мож­но пе­ре­местить кур­сор ли­бо стрел­ка­ми вверх/вниз, ли­бо вве­дя но­мер нуж­но­го ок­на; а за­тем пе­рей­ти к вы­бран­но­му ок­ну на­жа­ти­ем Enter.

Рис. 3 Рис. 3. Пол­ный спи­сок окон с кур­со­ром для вы­бо­ра.

И, на­конец, мож­но на­жать C-a ' и по­сле поя­вив­ше­го­ся при­гла­шения вве­сти но­мер или за­го­ло­вок нуж­но­го ок­на – при­чем за­го­ло­вок не обя­за­тель­но вво­дить пол­но­стью: доста­точ­но од­ной или несколь­ких пер­вых букв, ко­то­рые по­зво­лят од­но­знач­но от­ли­чить его от имен дру­гих от­кры­тых окон. На­при­мер, для пе­ре­клю­чения ме­ж­ду упо­мя­ну­ты­ми вы­ше тре­мя ок­на­ми с bash, top и emacs мож­но по­сле C-a ' вве­сти b, t или e.

Кро­ме рас­смот­рен­ных трёх ва­ри­ан­тов пе­ре­клю­чения к лю­бо­му ок­ну, мож­но так­же пе­рей­ти к сле­дую­ще­му или пре­ды­ду­ще­му (в по­ряд­ке но­ме­ров) кла­ви­ша­ми C-a про­бел (или C-a n) и C-a BackSpace (или C-a p).

Ес­ли наи­бо­лее удоб­ным для се­бя вы най­дё­те пе­ре­клю­чение по но­ме­рам окон, осталь­ные спо­со­бы то­же мо­гут при­го­дить­ся; на­при­мер, ес­ли вы соз­да­ди­те боль­ше де­ся­ти окон.

А те­перь да­вай­те хо­ром

Зная, как соз­да­вать ок­на и пе­ре­клю­чать­ся ме­ж­ду ними, вы мо­же­те за­хо­теть ото­бра­зить на эк­ране од­но­вре­мен­но боль­ше од­но­го ок­на.

В Screen ис­поль­зу­ет­ся кон­цеп­ция непе­ре­кры­ваю­щих­ся окон: эк­ран раз­би­ва­ет­ся на пря­мо­уголь­ные об­ласти [англ. regions], в ка­ж­дой из ко­то­рых ото­бра­жа­ет­ся ров­но од­но ок­но. Этот прин­цип мо­жет быть вам уже зна­ком, ес­ли вы ис­поль­зо­ва­ли один из так на­зы­вае­мых «тай­ло­вых» или «фрей­мо­вых» окон­ных менед­же­ров.

По­сле за­пуска Screen есть од­на та­кая об­ласть раз­ме­ром во весь эк­ран (или ок­но тер­ми­на­ла). Что­бы раз­де­лить эк­ран на две го­ри­зон­таль­ные об­ласти, на­жми­те C-a S. Ак­тив­ная об­ласть умень­шит­ся по вы­со­те вдвое, а на осво­бо­див­шем­ся месте возникнет но­вая, со­дер­жа­щая пустое ок­но. Те­перь вы мо­же­те пе­ре­клю­чить­ся на неё на­жа­ти­ем C-a Tab, а за­тем вы­брать од­но из су­ще­ствую­щих окон лю­бым рас­смот­рен­ным вы­ше спо­со­бом. По­втор­ные на­жа­тия C-a S бу­дут соз­да­вать но­вые го­ри­зон­таль­ные об­ласти, умень­шая вы­со­ту уже су­ще­ствую­щих.

Вер­тикаль­ное раз­де­ление на дан­ный мо­мент доступ­но в вер­сии из Git, а го­то­вые па­ке­ты до­бав­ле­ны, на­сколь­ко мне из­вест­но, толь­ко в Debian, и от­ту­да по­па­ли в Ubuntu, а воз­мож­но, и дру­гие про­из­вод­ные ди­ст­ри­бу­ти­вы. По крайней ме­ре, в Mandriva, SUSE, Fedora, Arch, Slackware и Gentoo этот функ­цио­нал от­сут­ству­ет (бла­го­да­рю уча­стников фо­ру­ма unixforum.org за про­вер­ку этой ин­фор­ма­ции). Ес­ли у вас Debian или Ubuntu с вер­си­ей Screen не мень­ше 4.0.3‑10 или вы со­бе­рё­те Screen са­мо­стоя­тель­но, взяв ис­ход­ный код из Git или из Debian, то вы смо­же­те раз­де­лять об­ласти и по вер­тика­ли с по­мо­щью C-a |. Ком­бинируя вер­тикаль­ное и го­ри­зон­таль­ное раз­де­ление, мож­но до­бить­ся лю­бо­го рас­по­ло­жения окон, ка­кое вам бу­дет удоб­но.

Что­бы уб­рать ка­кую-то из су­ще­ствую­щих об­ластей, пе­ре­клю­чи­тесь на неё и на­жми­те C-a X. Кро­ме то­го, мож­но, на­обо­рот, оста­вить толь­ко ак­тив­ную об­ласть, рас­пах­нув её на весь эк­ран, с по­мо­щью C-a Q. За­ме­чу здесь ещё раз, что об­ласти эк­ра­на и ок­на с про­грам­ма­ми – это две от­дель­ные сущ­но­сти: при уда­лении об­ласти со­дер­жа­щее­ся в ней ок­но не за­кро­ет­ся, а бу­дет по-прежнему доступ­но для вы­бо­ра в лю­бой из остав­ших­ся или но­вых об­ластей.

Оста­лось толь­ко нау­чить­ся из­ме­нять раз­мер соз­дан­ных об­ластей. Для это­го пред­на­зна­че­на коман­да resize [англ. «из­менить раз­мер»]. По умол­чанию ника­кая кла­ви­ша на «пуль­те» для неё не на­зна­че­на, но это мож­но лег­ко сде­лать са­мо­стоя­тель­но – ниже бу­дет опи­са­но, как. Коман­да из­ме­ня­ет раз­мер те­ку­ще­го ок­на (растя­ги­вая со­седние при его умень­шении и сжи­мая при уве­ли­чении) и принима­ет один из шести ви­дов ар­гу­мен­тов, смысл ко­то­рых та­ков (бу­к­вой N обо­зна­че­но про­из­воль­ное на­ту­раль­ное чис­ло):

  • resize +N – Уве­ли­чить на N по­зи­ций.
  • resize -N – Умень­шить на N по­зи­ций.
  • resize N – За­дать раз­мер рав­ным N.
  • resize min – Умень­шить раз­мер до минималь­но воз­мож­но­го.
  • resize max – Уве­ли­чить раз­мер до мак­си­маль­но воз­мож­но­го.
  • resize = – Сде­лать все ок­на в ря­ду оди­на­ко­вы­ми по раз­ме­ру.

Ес­ли за­дать коман­ду без ар­гу­мен­та, то од­но из этих зна­чений бу­дет пред­ло­же­но вве­сти с кла­виа­ту­ры. Как мы уви­дим поз­же, на кла­ви­шу мож­но на­зна­чить коман­ду в том чис­ле и с ар­гу­мен­том.

Как за ка­мен­ной сте­ной

С мно­го­окон­ной ра­бо­той мы уже доста­точ­но по­зна­ко­ми­лись; да­вай­те те­перь пе­рей­дём к то­му, что я на­звал спа­си­тель­ны­ми воз­мож­но­стя­ми Screen и что де­ла­ет его чем-то боль­шим, чем окон­ный менед­жер.

Как непри­ят­но бы­ва­ет, когда ра­бо­та пре­ры­ва­ет­ся в са­мый непод­хо­дя­щий мо­мент! Слу­чай­но за­кры­тое ок­но тер­ми­на­ла, сбой X или об­рыв SSH-со­единения мо­гут сто­ить вам несколь­ких ча­сов ра­бо­ты – но толь­ко не в том слу­чае, ес­ли вы ис­поль­зуе­те Screen. Ему не страш­на по­те­ря той обо­лоч­ки, из ко­то­рой его за­пусти­ли: Screen про­дол­жа­ет ра­бо­тать, а вме­сте с ним и все от­кры­тые внут­ри него про­грам­мы. Доста­точ­но лишь под­клю­чить­ся к на­ча­той сес­сии с дру­го­го тер­ми­на­ла.

Мо­же­те сра­зу про­ве­рить это. За­крой­те ок­но тер­ми­на­ла с тре­мя ок­на­ми Screen, опи­сан­ны­ми в на­ча­ле ста­тьи (или от­со­едините сам Screen от тер­ми­на­ла, на­жав C-a C-d). А за­тем от­крой­те но­вое ок­но (или пе­ре­клю­чи­тесь на од­ну из вир­ту­аль­ных кон­со­лей; или зай­ди­те на эту ма­ши­ну по SSH) и вве­ди­те

screen -r

Бу­к­ва r здесь от сло­ва reattach – под­клю­чить­ся за­но­во. Ес­ли у вас на этой ма­шине от­кры­та толь­ко од­на сес­сия Screen, тут же про­изой­дёт под­клю­чение к ней, и вы уви­ди­те всё точ­но в том же ви­де, как и до за­кры­тия ок­на. Ес­ли сес­сий несколь­ко, ука­жите по­сле -r иден­ти­фи­ка­тор нуж­ной вам. При ис­поль­зо­вании Bash и уста­нов­лен­ном па­ке­те bash-completion бу­дет ра­бо­тать ав­то­до­полнение. Иден­ти­фи­ка­тор сес­сии со­сто­ит из но­ме­ра про­цес­са, имени сес­сии (по умол­чанию ту­да под­став­ля­ет­ся имя уст­рой­ства тер­ми­на­ла, с ко­то­ро­го вы за­пусти­ли Screen) и имени хоста. Ес­ли имя сес­сии уникаль­но, мож­но ука­зать толь­ко его, вме­сто пол­но­го иден­ти­фи­ка­то­ра.

Те­перь пред­ста­вим дру­гую си­туа­цию: вы уш­ли, не за­кон­чив ра­бо­ту, а по­том ре­ши­ли про­дол­жить, на­хо­дясь в дру­гом месте. У вас есть доступ по SSH к ма­шине, на ко­то­рой от­кры­ты все ва­ши про­грам­мы, но сес­сия Screen оста­лась под­клю­чен­ной к тер­ми­на­лу. Про­сто до­бавь­те ещё од­ну оп­цию (пред­ва­ри­тель­но не за­быв зай­ти на нуж­ную ма­ши­ну по SSH):

screen -d -r


Рис. 4 Рис. 4. Од­на го­ри­зон­таль­ная и две вер­ти­каль­ных об­лас­ти: elinks, emacs и bash.

Сес­сия ав­то­ма­ти­че­ски от­клю­чит­ся [англ. detach] от уда­лён­но­го тер­ми­на­ла и под­клю­чит­ся к то­му, с ко­то­ро­го вве­де­на коман­да.

У клю­чей -d и -r есть «уси­лен­ные» ва­ри­ан­ты, обо­зна­чен­ные за­глав­ны­ми бу­к­ва­ми. Оп­ция -R под­клю­чит Screen к пер­вой доступ­ной сес­сии, да­же ес­ли их несколь­ко, а при от­сут­ствии доступ­ных сес­сий соз­даст но­вую, вы­ве­дя об этом со­об­щение в ста­тусную стро­ку. Оп­ция -D не толь­ко от­клю­чит ука­зан­ную (или пер­вую доступ­ную для -R) сес­сию, но и по­шлёт сиг­нал «от­боя» (SIGHUP) ро­ди­тель­ско­му тер­ми­на­лу. Это мо­жет быть по­лез­но как раз при от­клю­чении сес­сии от уда­лён­ной ма­ши­ны, что­бы не остав­лять там доступ­ную под ва­шей учёт­ной запи­сью кон­соль (са­ма сес­сия Screen мо­жет быть за­щи­ще­на па­ро­лем).

А eсли вы вдруг ре­ши­те за­вер­шить се­анс Screen вме­сте со все­ми ра­бо­таю­щи­ми внут­ри него про­грам­ма­ми, на­жми­те C-a C-\.

Один в по­ле не во­ин

По­ми­мо соб­ствен­ных до­воль­но бо­га­тых воз­мож­но­стей, Screen так­же уме­ет весь­ма успеш­но взаи­мо­дей­ство­вать с дру­ги­ми про­грам­ма­ми, ра­бо­таю­щи­ми внут­ри него.

На­при­мер, мож­но ко­пи­ро­вать текст из од­но­го ок­на в дру­гое. На­жми­те C-a [ или C-a Esc, что­бы на­чать вы­де­лять текст для ко­пи­ро­вания. Та­кое, ка­за­лось бы, неоче­вид­ное со­вме­щение кла­виш для этой коман­ды объ­яс­ня­ет­ся весь­ма про­сто: кла­ви­ша Esc генери­ру­ет тот же код, что и C-[.

За­тем пе­ре­мести­те кур­сор к од­ной из границ нуж­но­го уча­ст­ка, на­жми­те про­бел, пе­рей­ди­те к дру­гой границе и по­вто­ри­те на­жа­тие про­бе­ла. Текст ско­пи­ро­ван. Воз­мож­но, вы за­ме­ти­ли, что в про­цес­се вы­де­ления кур­сор мож­но пе­ре­дви­нуть за верх­нюю границу эк­ра­на. Текст при этом бу­дет про­кру­чи­вать­ся: у Screen есть соб­ствен­ный бу­фер, неза­ви­си­мый от ис­поль­зуе­мо­го тер­ми­на­ла. По­это­му коман­ду ко­пи­ро­вания мож­но ис­поль­зо­вать не толь­ко соб­ствен­но для ко­пи­ро­вания, но и для про­смот­ра. Уви­дев нуж­ное, мож­но от­менить про­цесс вы­де­ления на­жа­ти­ем Esc или q.

Для встав­ки ско­пи­ро­ван­но­го тек­ста вы­бе­ри­те нуж­ное ок­но и на­жми­те C-a ]. Эту па­ру кла­виш весь­ма про­сто за­помнить: мы как бы бе­рём текст в квад­рат­ные скоб­ки (от­кры­ваю­щая скоб­ка – на­ча­ло дей­ствия, за­кры­ваю­щая – окон­чание). Встав­ляе­мый текст бу­дет на­пря­мую пе­ре­дан внут­ренней про­грам­ме – точ­но так же, как ес­ли бы вы его вво­ди­ли с кла­виа­ту­ры.

Кро­ме ко­пи­ро­вания тек­ста из ок­на и встав­ки в ок­но, мож­но об­менивать­ся со­дер­жи­мым ме­ж­ду бу­фе­ром об­ме­на (не пу­тать с бу­фе­ром про­крут­ки ка­ж­до­го ок­на, упо­мя­ну­тым вы­ше) и фай­лом. Кла­ви­ша C-a > со­хранит бу­фер в файл (по умол­чанию это /tmp/screen-exchange; как имя, так и рас­по­ло­жение мож­но из­менить); C-a < счи­та­ет из то­го же фай­ла; а C-a = уда­лит файл об­ме­на. За­помнить так­же нетруд­но – по ана­ло­гии с пе­ре­на­прав­лением вы­во­да и вво­да в Bash.

Ес­ли вам нуж­но сле­дить за ка­кой-то про­грам­мой, не обя­за­тель­но соз­да­вать под её ок­но от­дель­ную об­ласть и всё вре­мя ту­да по­гля­ды­вать: Screen и это мо­жет сде­лать за вас. Ес­ли про­грам­ма вы­да­ёт зву­ко­вой сиг­нал (или же рав­но­знач­ное ему «мер­цание эк­ра­ном» при от­клю­чен­ных сиг­на­лах ди­на­ми­ка) при ожи­дае­мом со­бы­тии, ниче­го до­полнитель­но не нуж­но де­лать: Screen сам со­об­щит об этом сиг­на­ле надпи­сью ви­да «Bell in window 2» («зво­нок в окне 2»). Ес­ли вы не успе­ли про­честь это (да и лю­бое дру­гое) со­об­щение, доста­точ­но на­жать 'C-a m (от «message» – со­об­щение) для его по­вто­ра.

Кро­ме то­го, мож­но вклю­чить сле­жение за кон­крет­ным ок­ном [monitoring] на­жа­ти­ем C-a m. Тогда, как толь­ко коман­да в этом окне что-то вы­ве­дет, поя­вит­ся со­об­щение «Activity in window 1». И, на­конец, ес­ли коман­да, на­обо­рот, по­сто­ян­но что-то вы­во­дит в про­цес­се ра­бо­ты (на­при­мер, про­ис­хо­дит ком­пи­ля­ция), мож­но точ­но так же от­сле­жи­вать ок­но на пре­кра­щение ак­тив­но­сти, на­жав C-a _. По умол­чанию со­об­щение бу­дет вы­да­но по­сле три­дца­ти се­кунд непре­рыв­но­го мол­чания.

Так и за­пи­шем

Род­ст­вен­ничек

Дру­гая про­грам­ма с ана­ло­гич­ным функ­цио­на­лом на­зы­ва­ет­ся tmux и раз­ра­ба­ты­ва­ет­ся в рам­ках про­ек­та OpenBSD. Во­пре­ки дос­туп­ным в се­ти опи­са­ни­ям, раз­ли­чия ме­ж­ду ни­ми не так ве­ли­ки. Сайт про­ек­та: http://tmux.sourceforge.net.

Ес­ли в про­цес­се ра­бо­ты со Screen вы за­ме­ти­те, что ка­кие-то кон­крет­ные коман­ды при­хо­дит­ся вво­дить в его команд­ной стро­ке слиш­ком часто, са­мое вре­мя за­нять­ся на­строй­ка­ми.

Поль­зо­ва­тель­ские на­строй­ки Screen за­да­ют­ся в фай­ле .screenrc в до­машнем ка­та­ло­ге. Ис­поль­зу­ет­ся он точ­но так же, как, ска­жем, .bashrc для команд­ной обо­лоч­ки Bash: в него мож­но запи­сы­вать коман­ды, ко­то­рые по умол­чанию (то есть ес­ли вы не от­ка­же­тесь от это­го с по­мо­щью спе­ци­аль­ных оп­ций) вы­полняются при ка­ж­дом стар­те но­вой сес­сии Screen. Здесь применимы лю­бые внут­ренние коман­ды, вклю­чая уже рас­смот­рен­ную screen, соз­даю­­щую но­вые ок­на: с её по­мо­щью вы мо­же­те за­дать ав­то­ма­ти­че­ский за­пуск в от­дель­ных ок­нах про­грамм, ис­поль­зуемых по­сто­ян­но.

Для на­ча­ла мо­же­те ско­пи­ро­вать при­мер фай­ла на­стро­ек, иду­щий в ком­плек­те с про­грам­мой, и от­ре­дак­ти­ро­вать его на свой вкус. Обыч­но он на­зы­ва­ет­ся screenrc и ле­жит в ка­та­ло­ге /usr/share/doc/screen/examples. Так­же мо­же­те про­смот­реть ва­ри­ант об­ще­систем­но­го фай­ла etcscreenrc из то­го же ка­та­ло­га.

Рас­смот­рим па­ру по­лез­ных при­ме­ров. Во-пер­вых, это уже упо­мя­ну­тая ко­ман­да screen. Для соз­да­ния при стар­те тех же окон, что мы соз­да­ли вруч­ную в са­мом на­ча­ле, до­бавь­те в файл ко­ман­ды

screen
screen top
screen emacs

Впро­чем, top в ок­не под циф­рой 1 мо­жет не­мно­го ме­шать: удоб­нее иметь в пер­вых ок­нах про­грам­мы, с ко­то­ры­ми вы дей­ст­ви­тель­но ра­бо­тае­те, а не по­гля­ды­вае­те на них вре­мя от вре­ме­ни. По­то­му ото­дви­нем его по­даль­ше, за­дав но­мер ок­на при стар­те:

screen 9 top

И в за­вер­ше­ние на­зна­чим кла­ви­ши для ко­ман­ды resize:

bind ( resize -1
bind ) resize +1

Те­перь по на­жа­тию C-a ( ак­тив­ная об­ласть бу­дет умень­шать­ся на од­ну по­зи­цию, а по C-a ) – уве­ли­чи­вать­ся.

На этом наш крат­кий экс­курс за­вер­шен. На­де­юсь, вам бу­дет его дос­та­точ­но, что­бы на­чать ра­бо­тать с этим за­ме­ча­тель­ным ин­ст­ру­мен­том и изу­чать его бо­лее де­таль­но уже в про­цес­се, на прак­ти­ке.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию