portrait

Поиск



[software] [catdoc] [tcl] [geography] [old things]

Всем сестрам по... терминалу

 

- Я скажу тебе то, что Бенедикту давно следовало сообщить тебе в первую очередь. Никогда не доверяй родственникам. Это куда хуже, чем доверять незнакомцу.

Р. Желязны

Домашний компьютер — существенно более многопользовательский, чем офисный. Организация, как правило, может себе позволить купить по отдельному компьютеру на каждое рабочее место. А дома пользоваться компьютером желают все члены семьи, а заводить по компьютеру каждому не выгодно, поскольку компьютер требует не только денег на приобретение и апргрейд, но и времени на поддержание в рабочем состоянии. А чем меньше у вас проблем с деньгами, тем дороже вы цените свое время.

Кроме того, в офисе обычно есть специальный человек, который занимается поддержанием компьютеров в работоспособном состоянии. Может и не на полную ставку, но ему за это деньги платят. А дома бороться со всеми неприятностями, которые могут возникнуть с компьютером — вирусами, сбоями программ, потерянными данными, вам придется самостоятельно. Поэтому домашний компьютер должен быть существенно больее надежен чем офисный. Он вам не для того, чтобы операционную систему на нем переставлять, он для того чтобы письмо написать, фильм посмотреть, в игру поиграть.

Так что стоит позаботиться о том, чтобы каждый член семьи имел на общем семейным компьютере свою, неприкосновенную для других область для данных, и не мог бы нечаянно привести компьютер в нерабочее состояние, как раз в тот момент, когда другому члену семьи он позарез необходим.

Первое, что следует сделать, установив операционную систему на домашнем компьютере — это завести на нем каждого из членов семьи как пользователя. Это позволяют сделать все современные операционные системы, и даже многие несовременные — те в названии которых присутствует какой-то год из прошлого столетия.

Но поскольку темой данного номера являются свободные программы, мы эти несовременные системы и их более современные аналоги рассматривать не будем.

В unix-подобных операционных системах, к которым относятся и Linux, и системы семейства BSD, заведение пользователя — действие, которое имеет очень много последствий.

Во-первых, пользователю содается домашний каталог, который становится текущим при входе в систему. Во вторых, в этот каталог автоматически копируются файлы конфигурации многих программ из каталога /etc/skel, и в дальнейшем пользователь может настроить эти программы под себя, совершенно не мешая другим пользователям, у которых будут другие настройки.

В-третьих, все файлы, созданные от имени этого пользователя, создаются такими, что их может изменять и удалять только этот пользователь. (о том, как решить обратную задачу — позволить нескольким пользователям совместно работать над некоторой группой файлов, мы поговорим чуть позже). В некоторых дистрибутивах Linux домашние директории пользователей не доступны для других пользователей даже на чтение. В Debian при инсталляции задается вопрос — а нужно ли запрещать другим пользователям доступ к домашним директориям. Для домашних систем и небольших компаний, где сотрудники между собой знакомы лично, я рекомендую на этот вопрос отвечать «нет». Гораздо проще сказать человеку «возьми у меня в домашней директории такой-то файл», чем входить в систему самому и перекладывать этот файл в общедоступное место. А если у вас есть информация, которую вы действительно хотите скрыть от членов семьи, например, переписка с любимой девушкой, с которой вы еще не готовы познакомить родителей, никто не мешает вам создать у себя в домашнем каталоге подкаталог, к которому только вы будете иметь доступ. Нет, конечно, пользователь с правами системного администратора туда доберется, если захочет. Но это действие примерно того же плана, как взломать запертый ящик письменного стола.

В-четвертых, каждому пользователю создается почтовый ящик электронной почты. Многие, использующие компьютер дома, и подключающиеся через интернет к провайдеру, думают, что электронная почта это что-то обзательно связанное с Internet, и заведение электронного почтового ящика обязательно требует помощи, обычно платной, со стороны провайдера.

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

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

Для этой цели удобно использовать программу fetchmail, которая выкачивает почту из почтовых ящиков провайдера, и складывает ее в локальные.

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

А если вам удастся договориться с провайдером о предоставлении виртуального почтового домена, то будет еще удобнее. Виртуальный почтовый домен, это когда почта на все адреса вида user@your-machine.provider.ru складывается у провайдера в один единственный почтовый ящик your-machine@provider.ru, откуда ее забирает fetchmail, и разбирается, а какому, собственно, пользователю локальной машины она предназначена. То есть вы платите за один почтовый ящик, а имеете их столько, сколько вам надо. Причем в любой момент можете завести новый, не говоря ничего провайдеру, а только заведя нового пользователя или почтовый алиас на вашей локальной машине.

Многие провайдеры предоставляют такую услугу бесплатно, потому что она от них не требует никакого труда.

Я не буду здесь подробно расписывать все необходимые настройки почтовой системы (Mail Transport Agent, MTA) и fetchmail, необходимые для организации локальной электронной почты на домашней машине. Если вы захотите это сделать, вы разберетесь сами. Важно то, что теперь вы знаете, что так можно.

Аналогичным образом можно организовать работу и с новостями (USENET News). Причем это существенно более выгодно, так как достаточно вероятно, что несколько членов семьи читают одни и те же группы новостей, так что при наличии домашнего сервера новостей выкачивать эти группы придется ровно один раз. А если час онлайна ночью у вашего провайдера стоит дешевле, чем днем, то можно устроить что новости будут выкачиваться в наиболее дешевое время (с использованием сервиса cron), а читаться тогда, когда вам удобнее.

Полноценный сервер новостей на домашней машине как правило не нужен, поскольку заводить свои собственные группы новостей для четырех-пяти читателей как правило излишне. Лучше воспользоваться программой leafnode, которая предназначена как раз для такой ситуации. Но если у вас есть несколько потоков новостей, например кроме новостей с сервера вашего провайдера, вы получаете новости FidoNet с какого-нибудь узла Fido, объединение их всех вместе в локальном сервере новостй может оказаться удобным.

Предложенная система разграничения прав пользователей имеет и свои недостатки. Ограничив возможности пользователей вмешиваться в данные друг друга, мы одновременно ограничили их возможности менять конфигурацию системы. С одной стороны, это хорошо — вы можете быть уверенными, что ваши дети, играя в компьютерные игры не приведут ее в такое состояние, что вам, когда вам потребуется написать срочное письмо, не придется потратить пару часов на ее восстановление. С другой стороны многие очевидные и простые действия, которые хочется уметь совершать не становясь системным администратором — прочитать дискету или компакт-диск, установить соединение с провайдером, корректно выключить машину, наконец, почему-то требуют прав суперпользователя.

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

Есть универсальный метод делегирования прав — команда sudo, а есть частные методы, предназначенные для разрешения конкретных, наиболее распространенных действий — опция user в файле /etc/fstab для монтирования компакт-дисков и дискет, соответствующие опции в настройке pppd для соединения с интернетом и так далее.

Всегда если есть возможность, стоит пользоваться частным решением. Оно получается более удобным для пользователя и более безопасным для системы.

А еще есть возможность поручить управление такими действиями какому-нибудь демону (системному процессу), который будет анализировать запросы от пользователей и их выполнять. Это особенно удобно в тех случаях, когда на машине работают несколько пользователей одновременно.

Существуют разнообразные демоны автомонтирования, а pppd, который используется для установления соединения с интернетом, может работать в режиме demand (соединения по запросу). В этом режиме он постоянно висит в памяти и ждет, когда кому-нибудь понадобится доступ к ресурсу (веб-сайту, почтовому ящику) за пределами вашей машины. Тогда он начинает автоматически устанавливать соединение. Если же он замечает что установленное соединение в течении указанного времени не использовалось, он его обрывает.

Существует и отдельная программа diald, которая допускает гораздо более гибкое управление соединением. Впрочем, пока я еще пользовался dial-up соединениями с интернетом, мне всегда хватало возможностей самого pppd.

Пожалуй, единственная операция, которую нельзя поручить демону, это выключение машины. И то, если у вас есть источник бесперебойного питания, то можно запустить демона, который будет выключать машину, в случае если ups сообщил о пропадании напряжения в сети. Тогда можно будет безопасно выключать машину с помощью выдергивания вилки UPS из розетки.

Для выключения машины можно воспользоваться еще и той особенностью, что пользователь локальной консоли, то есть монитора и клавиатуры, подключенных непосредственно к системному блоку машины, считается в какой-то степени привелигированным. Например, в Linux нажатие Ctrl-Alt-Del на локальной клавиатуре (не в X window) приводит к выполнению команды, прописанной в /etc/inittab независимо от того, залогинен ли вообще пользователь в систему. Конечно, существуют механизмы, позволяющие ограничить возможности пользователей по останову системы, но для домашней машины их лучше выключить. Если кто-то из членов семьи решил выключить компьютер, значит, наверное, он знает что делает. Вдруг он собрался вывернуть пробки.

Я, правда, меняю действие по умолчанию при нажатии клавиш Ctrl-Alt-Del с перезагрузки на останов. В тех редких случаях, когда Linux-систему необходимо перезагрузить — например, замена ядра операционной системы, шелл с правами суперпользователя под рукой все равно есть. А вот остановить систему может понадобиться внезапно и кому угодно из членов семьи. Скажем, пришли электрики и сказали, что сейчас обесточат весь подъезд. Выучить, что для этого необходимо нажать Ctrl-Alt-F1, увидеть слово login: на черном экране, а потом нажать Ctrl-Alt-Del и машина выключится сама, способна по-моему даже бабушка, которая в других случаях к компьютеру вообще не подходит.

Система подключаемых модулей аутентификации (PAM) используемая в большинстве современных unix-подобных систем, позволяет настроить привелегии локального пользователя еще более гибко. Например можно отдать пользователю консоли в безраздельное пользование флоппи-дисковод или звуковую карту.

Как только вы настроите свою систему так, чтобы все члены семьи на ней могли работать, не портя данные друг друга, вы моментально столкнетесь с ситуацией, когда в семье возникнет жесткая конкуренция за место за клавиатурой. Сыну хочется поиграть, вам нужно срочно доделать какую-то работу, а жена засела в чате и обсуждает там с подругами кулинарные рецепты.

Если подобные ситуации возникают у вас в доме с регулярнонстью, достойной лучшего применения, значит вы созрели для того, чтобы в полной мере воспользоваться возможностями многопользовательской работы, которые предоставляют современные Unix-подобные системы. Ведь современный персональный компьютер очень редко когда работает на полную мощность. Девяносто процентов времени он проводит в ожидании ввода клавиши с клавиатуры или прихода байта из сети.

Вот если бы можно было подключить к нему три монитора, и три клавиатуры...

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

Лучше приделать ко второму монитору и клавиатуре ма-аленький процессор, (действительно маленький — 486DX2-66 вполне достаточно), который будет общаться с основной машиной по обычной компьютерной сети. Благо в систему X-Window, которая используется в Linux и *BSD для реализации пользовательского интерфейса, такая возможность встроена изначально.

Уже лет десять-пятнадцать как серийно выпускаются такие устройства. Они называются X-терминалами, и представляют собой фактически маленький компьютер, который загружает операционную систему по сети (обычно по протоколу tftp) запускает X-сервер и позволяет логиниться в любую из имеющихся в локальной сети машин, на которых запущен менеджер дисплея (xdm, kdm, gdm — сгодится любой). Последнее время фирмы производители предпочитают термин «тонкий клиент», хотя смысл остается тот же самый.

K сожалению, купить такое устройство не так-то просто. X-терминалы явно не являются продуктом массового спроса.

Поэтому наиболее доступным способом обзавестись X-терминалом является собрать его из обычных комплектующих персонального компьютера.

Почему предпочтительнее собирать именно X-терминал? По трем причинам:

  1. Его не надо администрировать. У него нет своего жесткого диска, своих файлов конфигурации (та конфигурация, которая есть живет на основной машине).
  2. Его не надо апгрейдить. Единожды собрав X-терминал вы будете его использовать три-пять лет без малейшего желания его обновить. На нем выполняется одна единственная программа — X сервер (ну пусть еще audio-сервер) и требования к процессору и объему памяти не меняются заметно на протяжении нескольких релизов операционной системы. У меня дома сейчас работает парочка аппаратных терминалов примерно десятилетней давности — у одного процессор Motorolla 68020 и 4 мегабайта памяти, у другого — Intel 960 и 12 мегабайт. И со своими задачами они прекрасно справляются.
  3. Все данные, программы и вся процессорная мощность главной машины доступны с любого рабочего места.

Для того чтобы собрать X-терминал потребуются:

  1. Материнская плата с процессором. Процессор слабее чем нужно вы вряд ли сегодня найдете — первый Pentium мегагерц на 120 самое то. Годится и 486, но лучше чтобы материнская плата имела шину PCI. Ведь вам понадобится более-менее приличная видеокарта.
  2. Мегабайт 12-16 памяти.
  3. Видеокарта. Учитывая то, что для 3d графики производительности сети скорее всего не хватит, хорошая PCI-ная видеокарта с 4-8 мегабайт видеопамяти — самое то.
  4. . Сетевая карта. Лучше покупать сетевую карту Intel или 3com, на которой уже установлен BIOS для загрузки по сети с использованием стандарта PXE. Другие варианты стоит пробовать только если у вас под рукой есть программатор для ROM.
  5. Клавиатура, монитор и мышь
  6. Звуковая карта. Вещь необязательная, но полезная.
  7. floppy-дисковод. Тоже вещь необязательная, и даже скорее ненужная, но, поскольку mtools умеют работать с удаленными дисководами, вы можете устроить так, чтобы с каждого рабочего места можно было читать дискеты.
  8. Корпус с блоком питания.

Скорее всего, практически все вышеперечисленное можно собрать по пыльным чуланам в виде остатков от апгрейда. Исключение составляет, пожалуй, только монитор. Работать с XWindow с разрешением меньше 1024x768 неудобно. Поэтому четырнадцатидюймовый монитор пятилетней давности вас вряд ли устроит.

Мы не будем здесь рассматривать подробности настройки программного обеспечения для X-терминалов. Если вас заинтересовал этот вопрос, вы можете обратиться к материалам на http://ppg.ice.ru/xterminals, http://pxes.sf.net, http://netstation.sf.net за более конкретными руководствами. Цель данной статьи показать как вообще можно организовать многопользовательскую рабочую среду в рамках отдельно взятой квартиры.

Система X-Window позволяет программам, работающим на основном компьютере, рисовать на мониторе терминала свои окошки, и получать ввод с клавиатуры и мыши. Больше она не делает ничего. Разве что позволяет изображенным на одном экране программам общаться друг с другом, даже если они запущены на разных машинах. Впрочем нам это пока не важно. Мы рассматриваем ситуацию, когда компьютер один. Но пользовательский интерфейс современного компьтера не сводится к клавиатуре и экрану.

Есть еще колонки, микрофон, принтер и так далее.

Что касается принтера и сканера, и, с некоторой натяжкой, устройств для внешних носителей (CD-ROM, стример, флоппи-дисковод), то их надо подключать к основной машине. В конце концов менять диски в CD-ROM надо не так часто. За этим, равно как и за распечаткой, можно и в соседнюю комнату сходить. (upd: В комплект mtools входит программа floppyd, которая позволяет решить проблему доступа к устройствам с файловой системой fat, т.е. дискетам и флэшкам, подключенным к терминалу)

А вот звук крайне желательно обеспечить непосредственно на X-терминале. К сожалению, не существует столь же общепринятого протокола для передачи звука по сети, как X-window для графики. Здесь есть несколько конкурирующих протоколов — NAS, eSound, arts, rplay. А многие программы вообще пытаются писать звук напрямую в /dev/dsp. Вот этого им позволять в многотерминальной системе ни в коем случае не следует. Представьте себе, что вы пытаетесь сосредоточиться над важным и срочным документом, сидя за монитором, подключенным непосредственно к компьютеру. А в это время в соседней комнате ваш младший брат запускает какой-нибудь warcraft, и из динамиков начинает раздаваться «We are under attack!».

К счастью и для NAS и для eSound имеются утилиты, позволяющие перехватить вывод в /dev/dsp и отправить его по назначению.

Отдельным преимуществом использования audio-сервера, является то, что он мультиплексирует вывод, т.е. позволяет нескольким программам издавать звуки одновременно, независимо от того, поддерживает ли это звуковая карточка аппаратно.

Из четырех перечисленных аудио-серверов рекомендую остановиться на NAS, если только вы не являетесть фанатиком GNOME, и вашим наиболее логичным выбором является родной для GNOME eSound. Если вы используете KDE то заставить его работать через NAS крайне просто. Нужно просто не запускать его родной artsd. Тогда KDE будет пользоваться для вывода звука функциями нижележащей библиотеки Qt, а та умеет использовать NAS. Если, конечно, авторы вашего дистрибутива не отключили это при компиляции. А если отключили — никто не мешает вам пересобрать Qt. После чего вы сможете наслаждаться звуком не только из KDE-шных программ, но и из многих других, поддерживающих NAS, а также из тех, которые пишут в /dev/dsp, с помощью libaudiooss.

К сожалению, не все задачи, для которых в наше время используют компьютеры, а особенно компьютеры домашние, удобно решать с помощью X-терминала. Ведь локальная видеокарта соединена с процессором быстродействующей шиной PCI, а то и AGP, а терминал — в лучшем случае 100-мегабитным Ethernet. Поэтому следует сразу распрощаться с идеей смотреть на терминале кино. Да и трехмерные игры будут работать далеко не все — только те, которые аккуратно используют OpenGL, и поэтому требуют достаточно ограниченной полосы пропускания между программой и X-сервером.

В данный момент мне не известен ни один проигрыватель Macromedia Flash, который корректно работает на удаленных терминалах. Родной flashplayer от Macromedia просто роняет мозиллу, а OpenSource libflash с http://www.directfb.org/download/ отказывается работать в отсутствие MIT-SHM расширения X-протокола. Впрочем, я думаю, усилиями OpenSource сообщества эта проблема в ближайшее время будет ликвидирована. (Upd: Начиная с версии 6.0 флэшплейер от Macromedia корректно работает на удаленных терминалах)

Так что терминалы следует рассматривать как рабочие места, а в качестве развлекательного центра использовать локальный дисплей. Если у вас есть общая комната, рекомендую поставить компьютер именно в ней. Это заодно избавит вас от раздражающих стонов модема по ночам, когда кому-то из членов семьи срочно понадобилось в Internet (впрочем, на то есть команда модема ATM0), а также облегчит доступ к принтеру. У меня компьютер стоит в моей комнате (так исторически сложилось), в результате чего сестре приходится частенько прокрадываться на цыпочках по ночам к принтеру, чтобы забрать распечатку очередной своей статьи.

И наконец, о маленькой проблеме, почти не связанной с тем, как организована рабочая среда в доме. Что делать, если, придя на работу, вы забыли дома крайне необходимый именно сегодня файл?

Если домашний компьютер имеет постоянное подключение к Internet - никаких проблем. sshd у вас там наверняка стоит, так что запускаете scp и вперед. Или сначала заходите по ssh и находите нужный файл, а потом scp его на работу. А если соединение диалапное?

Если дома кто-то есть, то можно позвонить домой и попросить выслать этот файл по почте. Впрочем, это не обязательно. Достаточно попросить поднять канал в Internet. Если после этого вы сумеете узнать IP-адрес вашего домашнего компьютера (например посмотрев в ICQ свойства того пользователя, которому вы только что звонили), то scp этот-адрес:нужный-файл. А если дома никого нет?

То и тут не все потеряно. Если вы позаботились установить на свой домашний компьютер mgetty, чтобы она принимала входящие факсы и работала автоответчиком, то вы можете позвонить себе домой обычным модемом, например с помощью программы cu получить интерактивную сессию, и выкачать этот файл по протоколу Z-Modem.

В то время, когда у меня не было постоянного соединения с Internet я обычно настраивал mgetty так, чтобы она брала трубку через 7-10 звонков. Если дома кто-то есть, то за это время успеют подойти. А уходя из дома не надо ничего перенастраивать.