Показаны сообщения с ярлыком VirtualBox. Показать все сообщения
Показаны сообщения с ярлыком VirtualBox. Показать все сообщения

пятница, 7 сентября 2012 г.

Установка FreeNX сервера на Ubuntu

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

Итак....

 Для начала создаем скрипт, скажем install.sh, и запихиваем в него следующий текст:

echo **
echo *FreeNX Setup Script*
echo **

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:freenx-team
sudo apt-get update
sudo apt-get install freenx -y
sleep 5

echo **
echo *The End*
echo **


Делаем файл исполняемым:

sudo chmod +x install.sh

Этот простенький скрипт добавит репозиторий в ваш sources.list и скачает и установки все необходимое, а то-есть: минимальный (совсем) gnome2 и сам, собственно, freenx-server. Если вас это устраивает, то запускаем скрипт установки. Если же нет, то сами ставим графику с софтом по своему усмотрению, а только затем запускаем скрипт.

sudo bash ./install.sh

По окончанию процесса установки меняем файл node.conf по пути /etc/nxserver:

sudo nano /etc/nxserve/node.conf

Находим строчку:

#ENABLE_PASSDB_AUTHENTICATION="0"

и меняем на:

ENABLE_PASSDB_AUTHENTICATION="1"

Далее нужно установить права пользователям на доступ к NX-серверу по ssh. Для этого нужно в файле:

sudo nano /etc/ssh/sshd_config

после строк:

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile        %h/.ssh/authorized_keys2

Добавить:

AllowUsers nx your*user*name
  
Где nx - системный юзверь (на сколько я понимаю), без которого вообще ничего работать удаленно не будет, а your*user*name - имена пользователей, учетные записи которых будут на сервере, и которым вы хотите дать доступ к NX-серверу.

Далее создаем так называемый client id dsa - ключ, который будет использоваться для проверки доступа подключаюегося серверу пользователя. Для этого:

sudo /usr/lib/nx/nxkeygen

Если все ок, то выхлоп будет следующим:

Unique key generated; your users must install
/var/lib/nxserver/home/.ssh/client.id_dsa.key
on their computers.


Что значит, что нужно скопировать сгенеренный ключ на клиентские машины из указанной папки.

Далее создаем файл users.id_dsa в папке /etc/nxserver, и копируем в него содержимое файлика /var/lib/nxserver/home/.ssh/client.id_dsa.key.

Далее добавляем юзверя в юзер-лист NX-сервера. Пользователь, соответственно,  должен был быть зарегистрирован в самой системе.

sudo nxserver --adduser chris

Если выхлоп получился подобный:

NX> 100 NXSERVER - Version 3.2.0-74-SVN OS (GPL, using backend: 3.4.0)
egrep: /etc/nxserver/passwords: No such file or directory
cp: cannot stat `/etc/nxserver/passwords': No such file or directory
NX> 1000 NXNODE - Version 3.2.0-74-SVN OS (GPL, using backend: 3.4.0)
cat: /etc/nxserver/users.id_dsa.pub: No such file or directory
cat: /etc/nxserver/users.id_dsa.pub: No such file or directory
NX> 716 Public key added to: /home/chris/.ssh/authorized_keys2
NX> 1001 Bye.
NX> 999 Bye


то все ОК, если нет - ищем ошибку. 

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

sudo nxserver --passwd chris

Если выхлоп такой:

NX> 100 NXSERVER - Version 3.2.0-74-SVN OS (GPL, using backend: 3.4.0)
New password:
Password changed.
NX> 999 Bye


то все ОК, если нет - ищем ошибку.

Далее выдаем разрешения системному пользователю на пользование папочкой и всем её содержимым:

sudo chown nx:root /var/lib/nxserver/db/*

Перезагружаем ssh-сервер и freenx-сервер:

sudo /etc/init.d/ssh restart

sudo nxserver --restart


Далее через NX-Client коннектимся к серверу, не забыв указать путь к скопированному ключу. Если коннект прошел успешно - радуемся жизни, играемся дальше.

Все, that's all toons, kids :)

вторник, 14 августа 2012 г.

Печать на принтер из Ubuntu БЕЗ ДРАЙВЕРОВ (Part II)

Как я уже упоминал в первой части статьи, главная цель - заставить принтер, на который нет драйверов для Linux, печатать. Для этого была создана виртуалка с Windows XP SP3 VL, которая была прикручена к домену и раздавала в AD принтер, чтобы пользователи, подключенные терминально к 2003-му серверу могли из 1С печатать на этот принтер. Ну и соответственно чтобы можно было печатать на этот принтер с любой линуксовой машины в сетке. Но! Есть некоторые моменты, которые не учел или не упомянул автор мануала, по которому я решал поставленную задачу. А именно:

Winp (который преобразует в pdf распечатываемый файл и отсылает его в расшаренную папку на виртуалке, чтобы та в свою очередь через питоновский скрипт выводила его на печать) не очень мягко говоря дружит с авторизацией в домене, из-за чего у меня постоянно вышибала ошибка "NT_Authentification_Error" (ну или в таком духе - дословно не записывал). Эту проблему я решил добавлением еще одного сетевого адаптера в виртуалку, который смотрел во внутреннюю сеть адаптера на хосте. И получает от него свой IP по DHCP. Далее на виртуалке я прикрутил к системе локального пользователя, не относящегося к AD, и назвал его test, пароль ему дал test1234. В настройках все того же winp в Ubuntu я прописал данные авторизации этого пользователя, что позволило мне все-таки получить доступ к расшаренной по smb папке на вируталке. И ДА!!!!! В этом же файле перед данными авторазации нужно указать прямой путь к smbclient, о чем никак не упоминает ни автор мануала, ни автор скрипта. У меня эта часть выглядит так:
...........
SMBBIN=/usr/bin/smbclient
SMBUSER=test
SMBPASS=test1234
...........

Далее нужно в настройках уже созданного ранее виртуального принтера на Ubuntu указать новый адрес, по которому теперь winp должен будет стучать в расшаренную папку. Причем указывать нужно именно NETBIOS имя виртуалки в сети, ибо если указать IP, то ничего работать не будет. У меня это:

winp://WINVBOX/spool

Все, применяем изменения, перезапускаем на всякий случай CUPS и пробуем печатать. Если все сделано верно и по мануалу, то печать пойдет. И не пугайтесь, если печать начнется не сразу, а секунд через 5-10: скорость зависит от выделенных виртуалке ресурсов системы. У меня они минимальные.

Надеюсь, кому-то эта статья будет полезна. Первая часть её находится ниже и под катом Part I.

понедельник, 13 августа 2012 г.

Печать на принтер из Ubuntu БЕЗ ДРАЙВЕРОВ (Part I)

Бывает, что у вас нет никсовых драйверов на, скажем, принтер или офисную МФУшку, и потому приходится выходить из положения путем создания виртуальной машины с "хрюшкой", которая бы стартовала вместе с системой и без графики, то-есть не выводила бы абсолютно ничего при запуске, и при этом раздавала бы в сеть принтер. К сетевому принтеру уже можно подключить виртуальный принтер в Ubuntu при помощи сервера печать CUPS. Но об этом попозже. Для начала заставим нашу виртуалку с установленным принтером стартовать разом с системой....

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

VBoxHeadless --startvm <uuid|name>

<uuid | name> здесь - название вашей виртуальной машины. Пишется без <>. 
 Это запустит виртуалку, имя которой вы указали без вывода графики. Все, машина в сети и принтер, который присоединен к ней, тоже. 

!!! Не забываем ставить дополнения гостевой ОС, а то не получите доступа к USB на виртуалке. Также не забудьте создать виртуалке отдельный USB-порт, к которому по умолчанию будет привязан принтер.

Теперь нужно настроить машину с Ubuntu для работы с принтером, ибо хоть он и сетевой, драйверов для него все так же нет. Делал я все по статье (source), ниже приведу её в не измененном виде (т.к. она замечательно написана и в правке не нуждается), так, на всякий противопожарный.

Для кого эта статья HOWTO?

Для тех, кто имеет хотя бы 1 компьютер под windows, и 1 или несколько компьютеров под linux, объединенные в сеть. Эта статья HOWTO предполагает, что принтер присоединен к компьютеру под windows, который всегда включен, и этот принтер правильно установлен под windows.

Почему Вам это может понадобиться?

Без описываемого метода Ваш принтер должен поддерживаться linux для возможности печатать из-под linux, даже если он присоединен к компьютеру с windows и Вы хотите печатать на нем по сети с помощью SMB. Между тем теоретически при наличии компьютера с Windows в сети, к которому присоединен Ваш принтер, Вы можете печатать на ЛЮБОМ принтере независимо от того, поддерживается ли он в linux. Я проверил этот метод для принтера HP LaserJet 5L (который обычным образом поддерживается под linux), и для принтера Canon imageCLASS MF3110 (который вообще НЕ поддерживается под linux в момент написания статьи). Обратите внимание, что единственное необходимое изменение в подключении принтеров - это назначение принтера по умолчанию на компьютере под windows.

Требования/допущения, относящиеся к компьютеру под Windows

  • Принтер присоединен к компьютеру под windows PC и драйвер правильно установлен
  • Разрешен общий доступ к файлам и принтерам на компьютере под windows
  • Установлен AFPL Ghostscript по ссылке http://www.cs.wisc.edu/~ghost/ (это не требуется для опции использования Acrobat)
  • Установлен GSview по ссылке http://www.cs.wisc.edu/~ghost/ (это не требуется для опции использования Acrobat)
  • Установлен Adobe Acrobat по ссылке http://adobe.com (требуется только для опции использования Acrobat)
  • Установлен Python по ссылке http://www.python.org/download/
  • Установлены расширения Python Win32 Extensions по ссылке http://starship.python.net/crew/mhammond/win32/Downloads.htm
  • Указанный принтер является принтером по умолчанию и желаемые его настройки (качество печати и т.д.) являются текущими настройками принтера
  • Все должно работать с большинством вариантов windows, но я проверял только на win2000

Требования/допущения, относящиеся к компьютеру под Linux

  • Установлен и правильно работает CUPS
  • Установлен клиент SAMBA (smbclient)

Настройка компьютера под Windows

Общий доступ к принтерам

Компьютер под windows реально не дает общий доступ к принтеру через SMB. Вместо этого общий доступ дается к директории (папке), которая будет использоваться как папка для помещения туда данных для печати (spool/dropbox).
Во-первых, создайте пользователя с помощью Панели управления windows. В приводимом примере именем пользователя будет "print", а паролем также "print". Вам следует использовать более надежный пароль.
Во-вторых, создайте папку для общего доступа. В данном примере я использую c:\temp\spool , а имя Вашего компьютера под windows windows_pc
В-третьих, разрешите общий доступ к этой папке и дайте пользователю print полный доступ к ней
Проверьте, что Вы имеете доступ к общей папке с компьютера под linux с помощью smbclient. То есть выполните команду: smbclient //windows_pc/spool -U print и убедитесь, что вы можете выполнять поместить файл командой put в эту общую папку

Скрипт Dirwatch

Далее нам нужен скрипт dirwatch.py , который можно получить по ссылке dirwatch.py. Сохраните его где-нибудь, например, в c:\scripts\dirwatch.py. Убедитесь, что Вы переименовали его в dirwatch.py (я сначала назвал его dirwatch.txt и мой web-сервер не хотел его выполнять!) Скрипт dirwatch основан на Большом примере Тима Голдена (Tim Golden), доступном по ссылке http://tgolden.sc.sabren.com/python/win32_how_do_i/watch_directory_for_changes.html
Откройте для редактирования скрипт dirwatch.py и сделайте следующие изменения:
  • Измените переменную path_to_watch (близко к началу) на Вашу общую папку. УБЕДИТЕСЬ, что обеспечили вывод всех символов \ , например, c:\temp\spool должно быть записано как "c:\\temp\\spool".
  • Измените переменную cmd (близко к концу) так, чтобы путь к файлу gsprint.exe был правильным. ВНИМАНИЕ: даже если Ваш принтер черно-белый, Вы должны все же там оставить опцию -color , иначе возможны проблемы. Эта опция обеспечивает 24-битовую шкалу оттенков серого, вместо 8-битовой.
Выполните скрипт dirwatch двойным кликом мыши на нем. Откроется окно с результатом его выполнения
Проверьте скрипт dirwatch путем использования smbclient (как описано выше) для записи (PUT) и затем переименования (RENAME) файла на языке postscript (с расширением .ps) в Вашу общую папку. Если все работает правильно, этот файл .ps будет напечатан на Вашем принтере и Вы увидите результат в окне терминала python на компьютере под windows
ВНИМАНИЕ: Скрипт dirwatch только распознает файлы, когда они ПЕРЕИМЕНОВЫВАЮТСЯ, поэтому Вам обязательно нужно сначала создать файл в папке, которую Вы указали в переменной path_to_watch, а потом переименовать его.
Теперь, когда скрипт dirwatch работает, прекратите процесс выполнения этого скрипта. Переименуйте dirwatch.py в dirwatch.pyw. С расширением .pyw не будут открываться окна командной строки во время выполнения скрипта.
Выполните новый скрипт dirwatch.pyw и поместите ярлык для него в папку автозагрузки, так чтобы он выполнялся автоматически при загрузке
ВНИМАНИЕ: Если Вы когда-либо заметите, что файлы печатаются в нескольких экземплярах, возможно, что запущены 2 или более копий скрипта dirwatch.pyw . Откройте диспетчер задач и прервите выполнение лишних копий процесса pythonw.exe . Это должно решить проблему.
Теперь компьютер под Windows полностью настроен.

Настройка компьютера под Linux

Установка Distiller PPD (удалитель иусора)

Должен быть установлен Adobe distiller PPD там, где CUPS сохраняют свои PPD. Этот мусорщик distiller PPD называется ADIST5.PPD и упакован в zip-файле, доступном по ссылке http://www.adobe.com/support/downloads/273e.htm
Извлеките из архива ADIST5.PPD и поместите в папку, где CUP хранят PPD. Обычно это /usr/share/cups/model/. Вы должны также переименовать его маленькими латинскими буквами, adist5.ppd.

Скрипт winp

Скачайте скрипт winp по ссылке winp. Разрешите его выполнение и поместите его туда, где CUPS хранит свои backend скрипты, обычно это /usr/lib/cups/backend/. Скрипт winp является модификацией скрипта pdfdistiller , автор которого - Michael Goffioul
Создайте папку для очереди печати в файловой системе linux для использования скриптом winp. В приводимом примере я использую папку /var/spool/winp. Убедитесь, что есть доступ для записи в эту папку для пользователя, под которым выполняется CUPS, обычно этот пользователь входит в группу lp. Предполагая, что CUPS выполняется от имени пользователя, входящего в группу lp, этой цели можно добиться выполнением команды chgrp lp /var/spool/winp и затем chmod g+w /var/spool/winp.
ВНИМАНИЕ: Это ОТДЕЛЬНАЯ папка для очереди печати на компьютере под linux. Это не та папка общего доступа, которая находится на компьютере под windows. Это - просто некоторая локальная папка для временного размещения данных при печати
Откройте скрипт winp для редактирования и сделайте следующие изменения:
  • Измените SPOOLDIR на адрес Вашей папки очереди печати, например, /var/spool/winp
  • Измените SMBUSER на имя пользователя, которое Вы использовали при настройке компьютера под windows, например, print
  • Измените SMBPASS на пароль вышеуказанного пользователя, использованного при настройке компьютера под windows, например, print
Перезапустите CUPS , чтобы он распознал новый скрипт winp среди скриптов backend.

Настройка принтера CUPS

Теперь создайте новый принтер CUPS, который использует этот backend-скрипт winp и сборщика мусора adobe distiller, выполнив с правами root следующую команду: lpadmin -p windows_printer -E -v winp://windows_pc/spool -m adist5.ppd Имейте в виду, что для параметра adist5.ppd малые и большие буквы различаются, так что мы предполагаем, что Вы переименовали этот файл малыми буквами. Параметр windows_printer - это имя Вашего нового принтера, и Вы должны заменить //windows_pc/spool на имя Вашего компьютера под windows и имя папки общего доступа для данных печати на этом компьютере под windows. Не забывайте winp: в начале.
Попробуйте напечатать на Ваш новый принтер CUPS. Надеюсь, он работает!. Если нет, посмотрите журнал ошибок CUPS, обычно это файл /var/log/cups/ (попробуйте изменить уровнь подробности выдачи в журнал - log level - в CUPS и перезапустить CUPS), а также посмотрите журнал winp в файле /tmp/winp.log. Одно из этих двух мест должно помочь Вам найти причину возникших проблем.

Использование вместо этого варианта adobe acrobat (необязательная опция!)

Если у Вас проблема с использованием gsprint, например, проблема с качеством печати или печать использует слишком много ресурсов процессора или памяти на Вашем компьютере с windows, то попробуйте изложенные в этом разделе инструкции.
Я обнаружил, что использование ghostscript на компьютере под windows обеспечивает несколько другое качество печати. Иногда результаты печати с использованием acrobat вызывали очень небольшие проблемы выравнивания текста, когда заполнение областей объекта печати было слегка за пределами границы печати (нужно смотреть очень внимательно, чтобы это заметить). В других случаях ghostscript был немного лучше (опять же нужно смотреть очень внимательно). Кроме того, для использования acrobat Вам нужно сначала преобразовать файл в формат PDF, что увеличит использование процессора (и увеличит шансы загрязнения текста во время преобразования). Наконец, если Вы используете acrobat в то время как кто-то печатает на принтере из-под windows, появится окно acrobat в панели задач. Оно будет свернутым и закроется само, но оно станет активным вместо того, с которым работает пользователь.
По скорости и использованию памяти Acrobat явно лучше. Я не знаю, является ли причиной обработка файлов PDF вместо бОльших по размеру файлов PS, или что-то другое. Если Ваш компьютер под windows имеет медленный процессор или малую память, то опция Acrobat может оказаться лучше для Вас.
В любом случае, если Вы предпочтете использование acrobat на Вашем компьютере под Windows, скачайте скрипт winp-pdf по ссылке winp-pdf и отредактируйте его тем же способом, как описано выше в разделе для скрипта winp. Отредактируйте также скрипт dirwatch.py и уберите знак комментария в строке с acrorc32.exe и соответственно поставьте знак комментария в строке с gsprint.exe . Также Вам нужно будет получить файл gdputil.exe по ссылке http://www.watchdirectory.net/watchDir/GdPUtil.html и поместить его в папку, входящую в системный путь path (например, в папку c:\winnt\system32).

Ограничения

  • Если компьютер под windows выключен, а Вы пытаетесь печатать, то CUPS-принтер остановится самостоятельно. Вам понадобится вручную перестартовать этот принтер, когда Ваш компьютер под windows снова будет включен и доступен, с помощью интерфейса администрирования CUPS.
  • Я не думаю, что исчезнет большое количество параметров настройки из компьютера под linux таких как качество печати, сортировка и т.д.
  • Сетевой пользователь SMB и его пароль явно вводятся в текст скрипта winp. Было бы лучше, если они будут частью URI , использованного, когда Вы устанавливали этот принтер под CUPS. Вам придется добавить эту возможность, если Вы хотите использовать несколько принтеров с разными паролями.