Thinstation — «худеем» с тонкими клиентами до версии 2.5

image
Доброго времени суток, Хабр!

Относительно недавно в свет вышла новая версия популярного тонкого клиента Thinstation, а именно 2.5. И, конечно же, несет в себе как новые плюшки, так и новые грабли плюс минимум документации по новой версии.

В этой статье (а она расчитана на новичков, особенно для тех, кто слабо знаком с Linux) я опишу как быстро собрать тонкого клиента и сделать его использование достаточно безопасным. Под хабракатом использование смарт-карт, RDP-клиент фирмы 2X и хэппи-энд. Добро пожаловать!


Постановка задачи


Итак, у нас имеется:
  • Несколько железяк, гордо именуемых «тонкими клиентами». Например, пара десятков уже давно не новых машинок HP HSTNC-001L-TC.
  • Настроенный терминальный сервер, к которому тонкие клиенты будут цепляться. Пусть будет MS Windows Server 2003 или 2008.

А теперь чего, собственно, хотим:
  • Загружать тонкие клиенты по сети (бездисково то есть).
  • Поддержку тонкими клиентами MS RDP версий 6+ или даже 7, т.к. это более безопасно и круто.
  • И не просто MS RDP, а с поддержкой TLS 1.0.
  • Авторизацию пользователей с помощью смарт-карт (т.е. проброс смарт-карты c тонкого клиента на сервер).
  • Захватить мир.

С чего начнем?


Для бездисковой загрузки наших тонких клиентов (а грузиться они будут по протоколу PXE) нам потребуется настроить DHCP-сервер и TFTP-сервер. Что это, для чего, как происходит загрузка по сети (PXE) и как это настроить хорошо и подробно написано тут. В качестве TFTP-сервера под Windows могу порекоммендовать tftpd32, который можно скачать тут. Несмотря на название, есть версии и для платформы x64.

Далее, если есть желание, можно немного почитать о Thinstation тут, тут и тут (под списком файлов для загрузки). На русском языке информацию можно найти здесь, хотя она уже несколько устаревает. Там расписывается создание и настройка образов Thinstation версии 2.2.2, многое актуально и для 2.5. Непосредственно версии 2.5 посвящена пока лишь одна страничка. Итак, начнем.

Первая сборка


Так как Thinstation основан на Linux'е, значит для сборки тонкого клиента нам потребуется компьютер с установленным Linux'ом (спасибо, КО!). Я использовал Ubuntu 11.10. Также нам понадобится установить Git (если его еще нет) и с его помощью склонировать себе репозиторий с генератором образов:

sudo apt-get install git-core
cd /home/user/
git clone --depth 1 git://thinstation.git.sourceforge.net/gitroot/thinstation/thinstation
cd thinstation

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

./setup-chroot

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

Пришла пора собрать наш первый, пока что «толстый», образ. Этот большой образ с поддержкой очень широкого списка аппаратки нужен, чтобы сгенерировать затем небольшой профиль для поддержки нашего конкретного железа. Хочу отметить, что в этом и заключается одна из главных плюшек новой версии Thinstation: теперь не надо самому руками составлять список драйверов, которые следует включить в образ — он сгенерируется автоматически скриптом.

Как советуют разработчики, сборку надо производить «inside chroot session», поэтому из скрипта setup-chroot.sh не выходим (нажимаем лишь «Q», чтобы скрыть приветственное сообщение скрипта) и пишем следующие команды в тамошней консоли:

cd ts/2.5
nano build.conf

В файле build.conf раскомментируем строчку "package extensions". Если у вас интернет через прокси, то еще раскомментируем строчку "param httpproxy" и укажем в ней свои настройки прокси-сервера (например, так: "param httpproxy user:password@proxy:port"), сохраним файл и продолжим сборку:

./build --allmodules

Смотрим на длинную портянку лога скрипта сборки, соглашаемся на скачивание дополнительных пакетов, если он попросит, и дожидаемся окончания процесса. Теперь копируем содержимое директории "/home/user/thinstation/ts/2.5/boot-images/pxe" (а это и есть наш собранный загрузочный образ) в корень TFTP-сервера и пробуем первый раз загрузить тонкого клиента по сети.

И вот тут мы можем встретить первые долгожданные грабли. Если оперативной памяти у вашего тонкого клиента мало, то мы возвращаемся к редактированию файла build.conf и закомментируем какой-нибудь тяжелый пакет, например "#package chrome", повторяем сборку и видим уменьшение обзаза почти в 2 раза. Теперь загрузка должна пойти.

Даже после этого с вероятностью, близкой к 100%, полной загрузки тонкого клиента не произойдет. Но нам этого и не надо. Ждем, когда загрузчик покажет нам картинку с надписью «Thinstation» и прогрессбаром. После этого нажимаем Ctrl+Alt+F3 и видим консоль с приглашением войти. Вводим следующую пару логин-пароль "root — pleasechangeme" и запускаем скрипт:

hwlister.sh

Этот скрипт сгенерирует нам файлы профиля для конкретного железа нашего тонкого клиента. Обычно их два: "module.list" (список драйверов для нашего железа) и "vbe_modes.list" (графические режимы). Теперь их нужно скопировать на Linux-машину. Сделать это можно, например, через TFTP-сервер (он должен позволять запись). В консоли тонкого клиента вводим:

cd /
tftp -p -l module.list -r module.list 192.168.0.1
tftp -p -l vbe_modes.list -r vbe_modes.list 192.168.0.1

, где 192.168.0.1 — адрес нашего TFTP-сервера. Вернемся к Linux-машине, создадим там папку "/home/user/thinstation/ts/2.5/machine/my_machine" и скопируем в нее из корня TFTP-сервера наши два полученных файла.

Страшный зверь — смарт-карта


Итак, чтобы наши пользователи могли авторизоваться в системе с помощью смарт-карт необходимо несколько вещей:
  • Собственно, сами смарт-карты. Например, такие.
  • Устройства для чтения смарт-карт (картридеры). Например, такие.
  • И, конечно же, наш терминальный сервер должен быть соответствующим образом настроен, чтобы использовать смарт-карты для аутентификации. Данная настройка сервера — тема большая. Про нее отдельно можно посмотреть и почитать. Кроме того, для поддержки конкретных смарт-карт необходимо установить на терминальный сервер ПО производителя. Для выбранных мною в качестве примера карт фирмы Aladdin оно находится тут. На данном этапе будем считать, что мы уже справились с настройкой терминального сервера и он позволяет пользователям логиниться, используя смарт-карты.

Теперь нам необходимо найти и собрать драйвера для картридера под Linux. На сайте производителя находим драйвера тут, качаем и распаковываем:

cd /home/user/
wget http://www.athena-scs.com/downloads/asedriveiiie-usb-3.7.tar.bz2
tar -xjf asedriveiiie-usb-3.7.tar.bz2
cd asedriveiiie-usb-3.7

Читаем README и видим, что для сборки нам понадобится установить пакет PCSC Lite (есть здесь, я ставил последнюю на тот момент версию ccid-1.4.5), а также нам понадобятся исходники libusb-0.1.12 (с более старшими версиями не собирается).

Ставим PCSC Lite, в папку с исходниками драйверов для картридера копируем файл usb.h из исходников libusb. Теперь запускаем обычное:

./configure
make
make install

Так как Thinstation уже содержит в себе пакет PCSC Lite, мы можем просто скопировать наши драйвера в сборщик Thinstation, вот так:

cp -LR /usr/lib/pcsc/drivers/ifd-ASEDriveIIIe-USB.bundle /home/user/thinstation/ts/2.5/packages/ccidreader/lib/pcsc/drivers

cp /etc/udev/rules.d/50-pcscd-asedriveiiie.rules /home/user/thinstation/ts/2.5/packages/ccidreader/etc/udev/rules.d

Все, готово! Теперь картридер при загрузке тонкого клиента будет определяться и работать нормально. В версии 2.5 такие извращения для работы со смарт-картами, как для 2.2.2, больше не нужны.

RDP-клиенты


Теперь немного о том, каким клиентом мы будем подключаться к терминальному серверу.
На данный момент самыми известными клиентами для Microsoft RDP для Linux-систем являются rdesktop и его форк — FreeRDP. Но! rdesktop не поддерживает TLS 1.0, а FreeRDP не умеет работать со смарт-картами. И это вызывает откровенную печаль!

После продолжительных поисков был обнаружен еще один RDP-клиент фирмы 2X. Скачать его можно тут. Оказалось, что он умеет все вышеперечисленное, бесплатен и к тому же еще поддерживает MS RDP версии 7.0 и активно развивается. Каково же было мое счатье, когда я узнал, что этот клиент входит в Thinstation!

Финишная прямая: конфигурируем и собираем


Тщательная конфигурация — тема большая, поэтому читаем тут в разделе "Конфигурационные файлы" для чего нужен каждый файл и где он должен лежать. В той статье описана конфигурация Thinstation версии 2.2.2. Здесь я расскажу про то, что изменилось в новой версии и приведу примеры своих конфигурационных файлов: build.conf, thinstation.conf.buildtime и thinstation.conf.network.
Итак, комментирую параметры из конфигураций в примерах:

build.conf:
  • machine my_machine — помните, мы сгенерировали профиль для железа и сложили его в папку "my_machine"? Это она и есть!
  • package xorg7-vesa — выбираем Xorg-драйвер. Вот тут возникли проблемы, потому что родной драйвер для моего чипсета SIS не подошел и пришлось на практике выяснять, какой из оставшихся подойдет. Vesa работает с моим чипсетом хорошо. Возможно тут придется параметр подбирать на практике.
  • package ccidreader — пакет PCSC Lite, который позволит нам работать со смарт-картами.
  • package 2x, package alsa-lib — это и есть наш замечательный RDP-клиент. Правда на практике было выявлено, что ему для работы нужен пакет Alsa, поэтому включаем и его.
  • param fastboot false — если этот параметр выставлен в true, то наш загрузочный образ будет разбит на основной и подгружаемую часть. К сожалению моя сетевая карта нецелый образ грузить отказалась, поэтому генерируем образ целым.
  • param basepath config — указывает, в какой папке на TFTP-сервере будут находиться конфигурационные файлы для клиентов (thinstation.conf.network, например).
  • #param rootpasswd и т.д. — комментируем параметры, которые задают какие-либо пароли. Если пароль рута закомментирован, то никто, даже если он читерски получит доступ к консоли Thinstation, не сможет залогиниться под рутом. И это хорошо)
  • param 2xurl — задает откуда будет скачан клиент 2X. Он будет скачан только один раз при первом запуске скрипта сборки.

thinstation.conf.buildtime:
  • DONT_VT_SWITCH_STATE=TRUE — не позволит пользователю через Ctrl+Alt+F3 переключиться в консоль.
  • DONT_ZAP_STATE=TRUE — не позволит пользователю через Ctrl+Alt+Backspace переинициализировать графический режим и опять же попасть в консоль.

И, наконец, пример описания запуска сессии для клиента 2X (thinstation.conf.network):

SESSION_0_TITLE="2X"
SESSION_0_TYPE=2X
SESSION_0_2X_OPTIONS="-m MX -C -u user -p password -s ssl://myTerminalServerIp"
SESSION_0_AUTOSTART=ON

, где:
  • -m MX — режим клиента, MS RDP, полноэкранный.
  • -C — редирект смарт-карты.
  • -u user -p password — логично, юзер-пароль. Но! Мы ведь хотим авторизоваться по смарт-карте, а не по паролю! Все просто: дело в том, что текущий 2X клиент не запустится без параметров юзера и пароля, а выплюнет вас Segmentation fault. И это полный бред. Однако после длительных разговоров со службой поддержки они эту проблему в следующем релизе обещали решить. Пока же просто пишем несуществующего пользователя и пароль наобум и спокойно авторизуемся по смарт-карте, как будто так и надо.
  • -s ssl://myTerminalServerIp — адрес сервера, к которомы будем подключаться. ssl указывает на то, что будет использован TLS 1.0.


С конфигурированием закончили. Теперь собираем клиента: запускаем скрипт setup-chroot.sh и вводим:

cd ts/2.5
./build

Полученный образ складываем в корень TFTP-сервера. Также в корне TFTP-сервера создаем папку "config" (та, которую мы указали в build.conf) и копируем в нее файл thinstation.conf.network.
Все готово! Запускаем, проверяем, видим окошко логина терминального сервера и радуемся! Хэппи-энд!

P.S. Возможно, я что-то упустил в данной статье. Хотелось бы услышать вопросы и комментарии. Спасибо!
Метки:
Поделиться публикацией
Похожие публикации
Комментарии 41
  • 0
    А сам терминальный сервер на чем собран(ОС, параметры сервера) и сколько пользователей обслуживает в этой аппаратной конфигурации?
    • 0
      Вопрос несколько не в тему, так как обсуждаются именно клиенты.

      По сабжу — пара не новых пролиантов с MS 2K3R2 Standart с балансировкой, включены в домен. Для 20+ пользователей — выше крыши.

      Конкретные настройки — тема большая и повод для холиваров. Разве что в личку пишите.
    • 0
      Как у 2x клиента обстоят дела с клавишами БЮ Ъ | / } в русской раскладке?
      • –1
        Заинтересовали вы меня, тоже попробую обновится. По разным причинам у меня часть клиентов с freerdp (тут плохо пробрасываются флешки и есть проблемы с клавишей |) взлетает и часть на rdesktop'e (тут беда со стрелочками на клавиатуре, причем только на некоторых клиентах).
        • +1
          Флэшки кстати пробрасывать тоже не пробовал — у нас наоборот задача стояла их проброс всячески запретить.
          Попробовал запустить с ключом "-D remotename=localpath" вот так:

          ./appserverclient -m MX -D W=/usr/bin -u user -p password -s ssl://myTerminalServerIp
          

          И на терминальном действительно появился раздел W с содержимым /usr/bin. Так что если флэшка смонтирована — то должно работать. С автомаунтом не игрался.
          • +1
            А, ну и стрелки корректно работают тоже)

            Единственный минус — в TS2.2.2 интегрировать последнюю версию клиента 2X у меня не получилось. Он Glibc 2.7+ и Alsa просит и еще несколько зависимостей.
          • +1
            Точно! Вот что я забыл потестить, спасибо)

            Только что проверил — идеально! И с капсом, и с шифтом все работает как надо. И 'Ёё', и '~' тоже корректно.
            Да, помню эти пляски с бубном в TS2.2.2, где крайние русские буквы с капсом не работали.
            • 0
              Давно и успешно юзаем 2x Application Server. Вкупе с клиентом 2х — космический функционал за скромные деньги (в сравнии с Цитриксом, например).
              Кстати, 2х клиент имеет очень важную для меня фичу- автомасштабирование rdp-десктопа. Т.е. теперь, работая за нетбуком с его мизерной диагональю, не приходится гонять скроллеры — весь рабочий стол масштабируется под размеры экрана. Мелковато, но с орлиным зрением — то, что нужно.
              • 0
                Вот и мы планируем с Цитрикса уходить. 2X как альтернатива — отличная вещь!
          • 0
            com порты можно пробросить?
            • +1
              Да, проверил на модеме + гипертерминал.
              Запускал с опцией "-O":

              -O [option]: redirect serial ports (this flag can be repeated with option)
              «off» to disable port redirection (default)
              «auto» for COM1=/dev/ttyS0, COM2=/dev/ttyS1, LPT1=/dev/lp0
              or option to override local device path: COM1=/dev/debugtty
            • +2
              Зашел почитать статью из-за картинки)
              • +1
                Буквально на днях вышел FreeRDP 1.0. Там много вкусных плюшек.
                • 0
                  Да, но в Thinstation он пока только в виде 0.8.2. Когда там появится первая версия — неизвестно.
                  Пробовал сам собрать пакет FreeRDP 1.0, но успехом не увенчалось — плевался ошибками и зависимостями.

                  А за информация спасибо! Надо бы попросить разработчиков TS поработать над добавлением)
                • 0
                  А мы на ponix работаем, слишком уж долго вкорячивался драйвер для видео в оригинальный Thinstation 2.2.2
                  конечно его победили, но уже после внедрения ponix, а ломать потом уже не хотелось
                  • 0
                    Хм, TinyCoreLinux — вот что надо использовать вместо этого вашего Thinstation. Или Slitaz, если железо терминалки позволяет. Thinstation как-то подзастрял в прошлом.
                    • +1
                      А можно чуть подробнее, чем на Ваш взгляд TinyCoreLinux лучше TS при решении данной задачи? И по каким параметрам TS застрял в прошлом?
                    • 0
                      Помнится, ещё этот дистрибутив можно собрать в виде iso-образа и установить на тонкий клиент. Буквально на днях должны приехать пара клиентов с CF'ками по 500 мегабайт. Вот и подумываю, а не поставить ли туда Thinkstation?
                      Не подскажите, как там обстоят дела с автозапуском того же X2 клиента с заданными определёнными настройками сразу при включении станции? И да, очень интересует возможность проброса флэшек.
                      • 0
                        s/X2/2X/
                        • 0
                          сам постоянно путаю)
                          • 0
                            Я придумал мнемонику, с помощью которой вы перестанете путать: 2x = TUX.
                        • 0
                          Да, есть такое дело. И виде iso образа собрать можно.
                          Автозапуск задается в конфигурационных файлах в виде сессии:

                          AUTOSTART=ON
                          
                          SESSION_0_TITLE="2X"
                          SESSION_0_TYPE=2X
                          SESSION_0_2X_OPTIONS="-m MX -C -u user -p password -s ssl://myTerminalServerIp"
                          SESSION_0_AUTOSTART=ON
                          

                          Этот конфиг должен лежать либо на TFTP-сервере и при запуске клиента тянуться оттуда, либо должен лежать на клиенте. Подробнее про конфигурационные файлы тут и тут.

                          А про проброс флэшек комментарий выше.
                          • 0
                            Спасибо за информацию. Будем тестировать.
                            • 0
                              У нас среди более-менее современных компов затесались несколько второпней без встроенной сетевухи, в них такие же древние CD-ROM'ы или дисководы. С них запускается только PXE-загрузчик, который уже грузит Thinstation по сети.
                              Немного огород, но зато можно оперативно всё сменить даже не заезжая в офис.
                              • 0
                                На днях собирал под конкретное железо thinstation, решил собрать с 2X. С каких сторон к нему не подходил, завести никак не смог. Через GUI в xfce подключиться смог, а параметрами либо даже просто из терминала никак. Да и производительность не порадовала, либо старый хлам в роли TS совсем не тянет. Но в rdesktop сейчас все еще печальнее. Ни флеш видео ни локальное плавно не идет :(
                                • 0
                                  Забудьте про 2X — это шлак. Он давно не развивается нормально. Да и rdesktop тоже плох. Сейчас единственная альтернатива — FreeRDP. Пробуйте его — не пожалеете!
                                  • 0
                                    Попробовал и его. Не понравилось одно — необходимость передавать логин и пароль в строку опций. Как я понял единственная альтернатива — собрать thinstation с zenity и наваять (или просто скопировать) сбор сведений из окна. Ну или хотя бы просто пароль, уж пользователя можно в конфиге клиента прописать. Попробовал через Xdialog это сделать, но как то уж больно топорно получается :( Если знаете еще способ, то с радостью выслушаю
                                    • 0
                                      А зачем передавать логин и пароль в строку опций? Я что-то не понял.
                                      Расскажите подробнее, что хочется сделать? FreeRDP самый кастомизируемый инструмент.
                                      • 0
                                        У rdesktop при указании хотя бы одного сервера уже происходит подключение и виден стандартный winlogon. Найти такой же способ подключения во freerdp мне не удалось. Из консоли (которую я не стал отключать) даже при указании только /v:ip запрашивает пароль. При указании в строке логина и пароля подключился успешно. Гугл тоже подсказал, что во freerdp нет варианта подключения с winlogon экраном. Люди пишут для тонких клиентов запрос логина и пароля в zenity. Если знаете как можно это обойти буду рад. А получить хочу после pxe загрузку древнего хлама, чтобы пользователю осталось только ввести логин и пароль. Также пробросить в сессию их жесткий диск и флеш (уже сделано) и желательно воспроизведение видеороликов учебных из ютуба например
                                        • 0
                                          Подключаетесь к 2008 или 2012 серверу с NLA?
                                          Отключите NLA в freerdp, добавив параметр "-sec-nla" — заработает. Т.е. так:
                                          xfreerdp -sec-nla /v:192.168.1.100
                                          • 0
                                            2008R2. Да, данная опция помогла, спасибо. Подключился. Все настройки перенес на него, теперь rdesktop не нужен, можно выпилиывать. Вот только с производительностью видео так проблема и не решена. При запуске в браузере видео или с диска заметна дерганная смена кадра. Смотрю top (оставил все таки консоль неблокированной) — xfreerdp и xorg при просмотре видео занимают по 45% процессорного времени. У xfreerdp иногда до 65 поднимается. В общем похоже дровишки под sis все таки оставляют желать лучшего. Появится на другом железе — сравню.
                            • 0
                              А вы не сталкивались с запуском skype или какого-нибудь SIP-клиента под thinstation?
                              • 0
                                Честно говоря, нет.
                                Вас интересует запуск Скайпа именно из Linux-окружения Thinstation? Или проброс звука и микрофона на терминальный сервер и запуск Скайпа там? Во втором случае все работает нормально.
                                • 0
                                  Меня интересует наличие sip-клиента (или хотя бы skype) в виде наличия связи на тонком клиенте. Как реализовать вообщем не важно, лишь бы работало надежно. Если честно, не думал, что вариант с пробросом звука будет работать (учитывая, что иногда возникают проблемы даже с пробросом флэшек). Ссылок на how-to нет случайно? Если пробрасывается звук, то вообщем и любой sip-клиент на терминальном сервере должен работать.
                                  • 0
                                    Хмм, интересно. Для проброса звука на тонкий клиент у 2X клиента есть опция "-S local". Но, как показал только что проведенный тест, не на всех клиентах звук появился. Тикет в саппорт напишу. Надеюсь, пофиксят.

                                    К сравнению, rdesktop с опцией "-r sound:local" пробрасывал звук на все клиенты. Может быть Вам стоит его использовать? Или попробовать потестировать 2X клиента на звук.
                                • 0
                                  В проекте poniX, есть готовый pkg c skype.
                                • 0
                                  такие извращения для работы со смарт-картами, как для 2.2.2, больше не нужны.
                                  я бы не стал так категорично утверждать, тем более там речь идет не просто о смарт-картах, а usb-х смарт-картах, а если быть точнее о Aladdin-ских USB-ключах eToken PRO 32k/64k

                                  FreeRDP не умеет работать со смарт-картами
                                  Вообще то FreeRDP 1.0, прекрасно работает с смарт-картами.
                                  • 0
                                    Выше написано, что FreeRDP 1.0 в Thinstation пока нет.
                                    Да, 1.0 действительно прекрасно со смарт-картами работает.
                                    • 0
                                      Ну и что, что его нету в базовом конструкторе Thinstation (хоть в 2.2 или 2.5), ведь нечего не мешает вам собрать свой pkg
                                      • 0
                                        — Я отгадаю эту мелодию с 4 нот
                                        — А я отгадаю эту мелодию с 3 нот
                                        — Угадывайте
                                        ;)
                                  • 0
                                    Не подскажите а где именно файл usb.h брать?

                                    Скачал файл libusb-0.1.12 по ссылке, этот файл не нашел, скопировал в директорию asedriveiiie-usb-3.7 все похожее
                                    cp -v usb* /home/serge/asedriveiiie-usb-3.7/

                                    «usb.c» -> «/home/serge/asedriveiiie-usb-3.7/usb.c»

                                    «usb.h.in» -> «/home/serge/asedriveiiie-usb-3.7/usb.h.in»

                                    «usbi.h» -> «/home/serge/asedriveiiie-usb-3.7/usbi.h»

                                    «usbpp.cpp» -> «/home/serge/asedriveiiie-usb-3.7/usbpp.cpp»

                                    «usbpp.h» -> «/home/serge/asedriveiiie-usb-3.7/usbpp.h»


                                    запускаю сборку

                                    serge@serge-nout:~/asedriveiiie-usb-3.7$ ./configure
                                    serge@serge-nout:~/asedriveiiie-usb-3.7$

                                    serge@serge-nout:~/asedriveiiie-usb-3.7$ make
                                    gcc -o libASEDriveIIIe-USB.so usb.c atr.c DriverIO.c CommandTypes.c ReaderCommands.c T1Protocol.c MemoryCards.c InitCardParams.c ifdhandler.c -fPIC -D_REENTRANT -DIFDHANDLERv2 -Wall -I. -pthread -I/usr/include/PCSC -lpcsclite -lusb -shared
                                    In file included from usb.c:14:0:
                                    usbi.h:4:17: фатальная ошибка: usb.h: Нет такого файла или каталога
                                    компиляция прервана.
                                    In file included from atr.c:1:0:
                                    Ase.h:20:17: фатальная ошибка: usb.h: Нет такого файла или каталога
                                    компиляция прервана.
                                    In file included from DriverIO.c:1:0:
                                    Ase.h:20:17: фатальная ошибка: usb.h: Нет такого файла или каталога
                                    компиляция прервана.
                                    In file included from CommandTypes.c:1:0:
                                    Ase.h:20:17: фатальная ошибка: usb.h: Нет такого файла или каталога
                                    компиляция прервана.
                                    In file included from ReaderCommands.c:1:0:
                                    Ase.h:20:17: фатальная ошибка: usb.h: Нет такого файла или каталога
                                    компиляция прервана.
                                    In file included from T1Protocol.c:1:0:
                                    Ase.h:20:17: фатальная ошибка: usb.h: Нет такого файла или каталога
                                    компиляция прервана.
                                    In file included from MemoryCards.c:1:0:
                                    Ase.h:20:17: фатальная ошибка: usb.h: Нет такого файла или каталога
                                    компиляция прервана.
                                    In file included from InitCardParams.c:1:0:
                                    Ase.h:20:17: фатальная ошибка: usb.h: Нет такого файла или каталога
                                    компиляция прервана.
                                    In file included from ifdhandler.c:15:0:
                                    Ase.h:20:17: фатальная ошибка: usb.h: Нет такого файла или каталога
                                    компиляция прервана.
                                    make: [libASEDriveIIIe-USB.so] Ошибка 1 (игнорирована)
                                    serge@serge-nout:~/asedriveiiie-usb-3.7$

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