среда, 29 апреля 2009 г.

FreeNX - авторизация

FreeNX работает через ssh и первоначальное соединение клиента с сервером выполняется от фиксированного имени пользователя - nx. Авторизация пользователя nx в ssh происходит по ключу. Далее, выполняется вход по ssh, уже от имени клиента идет соединение с localhost. Таким образом, для обеспечения работы FreeNX, в ssh достаточно иметь настройки разрешающие подключение к внешним ip адресам сервера пользователю nx с авторизацией по ключу, а пользователям необходима возможность интерактивного входа с localhost.

Если FreeNX настраивается способом, пердлагаемым после утановки (ключ --setup-nomachine-key), то в каталоге пользователя nx устанавливаются заранее сгенерированные ключи от NoMachine. При этом, на стороне клиента, тоже устанавливается, тот же самый ключ и при создании соединения он прописывается в конфигурационный файл клиента.

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

Изменение ключей ssh для FreeNX делается в два этап:
  1. На сервере запускается nskeygen, который создает новые ключи в домашнем каталоге пользователя nx (/var/lib/nxserver/home/.ssh/). Для клиента нужен файл client.id_dsa.key
  2. На клиенте необходимо заменить ключ в файлах конфигурации соединения (файлы с расшерением nxs). Так же, для последующего создания соединений с новым ключом, необходимо заменить содержимое клиентского файла server.id_dsa.key на новое с серверного файла client.id_dsa.key.

вторник, 28 апреля 2009 г.

FreeNX - общая информация

Зацепила меня самооценка. Разборки с FreeNX продолжаются =), а точнее они закончились и есть о чем написать.

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

FreeNX - это GPL реализация NX сервера, клиента и различных NX компонентов. Так же, существует бесплатная версия NX сервера от NoMachine - NX Free Edition. Соответственно FreeNX и NX Free Edition - абсолютно разные вещи.

Я все настраиваю и использую под Windows и Gentoo. На Gentoo установлена серверная часть net-misc/nxserver-freenx, а под Windows использую бесплатного клиента NoMachine. Дополнительно, под Gentoo, в качестве клиента использую net-misc/qtnx.

Как в деталях работает NX, вопрос отдельный и достаточно мутный. В общем случае, клиент по ssh соединяется с сервером, где запускается новая сессия X-сервера, аналогичным со startx методом.

День развлечений (freenx, synaptics)

freenx

Ну удачный день сегодня. Наткнулся в новостях на freenx - некая разновидность терминального сервера. Утверждается, что это тот же xdm только с функциями сжатия и т.п., т.е. как основное преимущество - работа по тонким и плохим линиям связи. Памятуя о том, что дома меня иногда напрягает работа xdmcp через wifi, а уж для применения через интернет, этот протокол вообще не подходит, решил его поставить.

Установка классическая:

#emerge net-misc/nxserver-freenx

Для проверки, с минимальными ограничениями по безопасности, необходимо одна команда:

#nxsetup --install --setup-nomachine-key --clean --purge

После этого все благополучно работает. Маленький нюанс, т.к. freenx работает через ssh, то этот демон должен быть соответственно запущен.

Дальше скачал клиента под windows c http://www.nomachine.com, подключился и вроде все в порядке. И вот разочарование, на первый взгляд мелочь, а заставила меня полностью отказаться от использования freenx - переключение языка ввода! Я так понимаю, что проблема русского языка не излечима.

Общая суть граблей - настройки сделанные в xorg не транслируются в freenx, соответственно, то что у меня настроено для переключения языка не работает. Локальный язык ввода (из windows) не передается удаленной машине. С танцами и бубнами удалось заставить работать встроенный в KDE переключатель раскладок, но это отличается от моего текущего профиля, при работе на локальном компьютере.

Поступил как последний ламер - снес freenx. Сижу думаю, кто не прав? Я - сдался и не разобрался до конца или все таки опять кривость технологий на стыке windows/linux? Вопросы конечно риторические, но по ходу пора покупать mac =).

synaptics

Для работы тачпада (touchpad) в новом xorg нужно установить драйвер xf86-input-synaptics и установить политику в /etc/hal/fdi/policy/11-x11-synaptics.fdi. Это проблем не вызывает, но как выяснилось, а я сразу не заметил, что при этом не работает щелчок по тачпаду.

Решение оказалось простое, надо добавить в файл политики одну строчку, которая привязывает щелчок по тачпаду к нажатию клавиши:

<merge key="input.x11_options.TapButton1" type="string">1</merge>

Пока копался с этим тапом, нашел еще полезняшку - скрол двумя пальцами. Внимательно читайте файлы с примерами =), там много интересного!

вторник, 14 апреля 2009 г.

sort

На днях наткнулся на интересную задачу, отсортировать содержимое файла, в котором первой строкой идут заголовки столбцов и был неприятно удивлен, отсутствием в sort такой опции. По моему, не логично =). Не исключаю факт, что есть более другая утилита sort, о которой мне не известно, или совсем другая программа которая может сортировать вывод по столбцам, в которой предусмотрено наличие заголовков.

Пока я остановился на комбинации sort и awk:

#cat file.txt | awk 'NR==1 ; NR > 1 {print $0 | "sort -k 2"}'

Считывается файл и перенаправляется в awk.

Первой командой NR==1 выводится первая строка файла, а дальше, для все строк больше 1, идет печать на стандартный вывод и перенапряляется в sort.

Конструкция получилас достаточно длинной, но можно затолкать в крипт и параметрами в него передавать ключи для sort. Получится его аналог, с сортирующий файл с первой строкой заголовка, или ещё парамтерами указывать, сколько строк считать заголовком.

Надо искать стандартную утилиту =(. Не нравится мне самодеятельность, не верю, что эта функция не включена ни в одну базовую утилиту.

пятница, 10 апреля 2009 г.

Время загрузки компьютера

Периодически я читаю новости =) о том, как быстро загружается компьютер и соответственно смотрю на собственный ноутбук. Я уже не помню какое ПО и в каком объеме у меня стояло пол года назад, остались результаты измерения от bootchart.

По замерам в ноябре прошлого года у меня получалось время загрузки 43 секунды. Сегодня я произвел новый замер и был приятно удивлен 36 секундами =).

Первое, что бросилось в глаза, это время загрузки ядра сократилось с 15 до 7 секунд. Неплохая прибавка =). Думаю, что это следствие его постепенной оптимизации - убирание лишнего, переход на более новые ядра.

Разобрал меня интерес, что делает ядро целых 7 секунд? Его размер копеечный, по сравнению со скоростью передачи данных, процессор достаточно мощный =). Железо заранее известно. В итоге включил я в ядре опцию фиксации времени событий:

Kernel hacking --->
[*] Show timing information on printks


Перезагрузился и анализируя вывод dmesg увидел очень странную вещь:

[ 2.764571] Synaptics Touchpad, model: 1, fw: 6.2, id: 0x1a0b1, caps: 0xa04793/0x302000
[ 2.764699] serio: Synaptics pass-through port at isa0060/serio4/input0
[ 2.802530] input: SynPS/2 Synaptics TouchPad as /class/input/input5
[ 6.910911] input: PS/2 Generic Mouse as /class/input/input6

Получается, что определение моего touchpad-а занимает у ядра практически 4 с лишним секунды!

За работу touchpad-а на ноутбуке в ядре отвечает CONFIG_MOUSE_PS2. Лишаться touchpad-а я не захотел =), по этому попробовал пересобрать поддержку ps2 мышей модулем. И наступило чудо! Скорость загрузки ядра сократилась до 3 секунд, а общее время загрузки с 36 до 31 секунды.

Я в шоке! Всегда считал, что наиболее предпочтительным все устройства собирать в ядре и не заморачиваться модулями. В общем я был беспрецедентно посрамлен =).

Дальнейший анализ результатов bootchart дал еще несколько идей по сокращению времени загрузки. Основной тормоз - fsck.reiserfs. Для проверки, я отключил fsck.reiserfs (создал файл /fastboot) и получил время загрузки 27 секунд! Достаточно.

Главное, что я понял из этих экспериментов - идеала не достичь ни когда.

З.Ы. Для справки - hwclock при старте системы занимает 2 секунды =))).