Эта статья достаточно долго провалялась у меня в черновиках и так и осталась незаконченной. И вот, спустя три года, я обнаружил её, разгребая залежи своих BackUp’ов. Простенький интерфейс старого доброго OPIE на скриншотах так меня обрадовал и навеял столько хороших воспоминаний, что я незамедлительно решил довести статью до ума и опубликовать её в блоге. К сожалению, я уже давно не являюсь владельцем портативной игровой приставки Ritmix RZX-50, но возможно ещё остались счастливые обладатели этого устройства, которым будет интересна нижеизложенная информация.
Расшифровывается аббревиатура OPIE как Open Palmtop Integrated Environment — это графический интерфейс с открытым исходным кодом, предназначенный для работы на карманных компьютерах или любых других устройствах, работающих на ядре Linux. В основном он использовался на коммуникаторах и PDA, произведенных фирмой Palm, а также на устройствах Sharp Zaurus. На самом деле OPIE является форком Qtopia — окружения для встраиваемых систем, которое когда-то разрабатывала ныне почившая компания Trolltech. OPIE изначально задумывался как графическое окружение для дистрибутива операционной системы GNU/Linux под названием Familiar. Familiar, в свою очередь, предназначался для работы на различных карманных компьютерах и предлагал на выбор два графических окружения — GPE и, соответственно, OPIE. Благодаря тому, что OPIE работает в режиме Framebuffer’а и не использует в своей работе оконную систему X Window System, на слабых устройствах удается сэкономить немного памяти и повысить отзывчивость интерфейса. Помимо этого преимуществом OPIE является бинарная совместимость с Qtopia. OPIE может быть установлен в самые различные карманные компьютеры или даже на мобильные телефоны, например, он мог запускаться параллельно EZX-окружению в смартфонах Motorola E2/E6/A1200/E680i или являться полноценной оболочкой в Siemens SX1.
Внешний вид интерфейса OPIE: Одна из вкладок Launcher’а и приложение opie-console, являющееся эмулятором терминала.
Последняя версия OPIE — 1.2.5, она датирована концом 2010 года. Увы, проект давным-давно не развивается и считается практически мёртвым. Функциональность этого графического окружения застряла где-то в 2005-2006 годах, и чтобы допилить его до юзабельного состояния на конкретном устройстве, нужно потратить очень много собственных сил и времени. Но запуск OPIE на таком гаджете, как Ritmix RZX-50, как говорится, just for fun, может быть интересным занятием на несколько вечеров. Ведь эта графическая оболочка своего рода одна из ветвей истории развития интерфейсов для мобильных устройств и встраиваемых систем.
Содержание:
1. Краткий обзор графической оболочки OPIE
1.1. Программы, идущие в стандартной поставке с OPIE
1.2. Игры, идущие в стандартной поставке с OPIE
1.3. Возможности настройки OPIE
2. Установка образа OPIE на Ritmix RZX-50
3. Сборка OPIE из исходного кода и создание образа с файловой системой
3.1. Настройка рабочего окружения
3.2. Загрузка и установка SDK для Ritmix RZX-50
3.3. Настройка окружения и сборка OPIE
3.4. Сборка образа файловой системы с OPIE
4. Заключение, вердикт
1. Краткий обзор графической оболочки OPIE
Предупреждаю сразу, что OPIE, собранный мной под Ritmix RZX-50, не слишком стабилен. Графическое окружение находится даже не в пределах Beta-релиза, а лишь в начале демонстрационной Alpha-версии.
Несколько слов об управлении. В графических оболочках, подобных OPIE, управление осуществляется в основном привычным многим курсором-стрелочкой. Поскольку в Ritmix RZX-50 дисплей не является сенсорным, за передвижение курсора по экрану будут отвечать клавиши D-pad’a, который так же возможно полностью переключить и на его стандартный режим. Для этого в образе OPIE имеется специальная программа-daemon: pwswd, которая «висит в фоне» и отслеживает нажатия различных клавиатурных сочетаний. К примеру, выполнение различных команд управления и переключение между режимами ввода информации осуществляются с помощью кратковременного сдвига ползунка в сторону отключения питания (Power) и нажатия соответствующей кнопки или кнопок управления.
Имеют место быть следующие комбинации:
- Power + B: переключение режимов эмуляции мышки и клавиатуры;
- Power + X: снять скриншот экрана, который сохранится в «/local/home»;
- Power + START + SELECT: перезагрузить устройство;
- Power + SELECT: немедленно закрыть текущее приложение;
- Power + L + R: выключить устройство.
В режиме работы эмуляции мышки, кнопки Ritmix RZX-50 отвечают за следующие действия:
- D-pad: движение курсора;
- A, L: клик левой кнопкой мышки;
- R, B: клик правой кнопкой мышки;
- X: увеличить скорость передвижения курсора;
- Y: уменьшить скорость передвижения курсора.
В режим эмуляции клавиатуры, кнопки RZX-50 отвечают за следующие клавиши:
- D-pad: стрелки передвижения курсора;
- A: Left Control;
- B: Left Alt;
- X: Space;
- Y: Left Shift;
- L: Tab;
- R: Backspace;
- SELECT: Escape;
- START: Return (Enter).
При первом запуске OPIE встречает нас окном Memory Status, которое вскоре скроется за пределами экрана, и диалоговым окном настройки даты и времени. Увы, но поставить правильное время на Ritmix RZX-50 вы не сможете: в устройстве отсутствует аккумулятор для сохранения времени после отключения питания. По-хорошему нужно было бы отключить показ этого окна, но я решил не заморачиваться на подобные пустяки, это ведь просто демонстрация возможности запуска OPIE на устройстве, работающим под управлением процессора на архитектуре MIPS. Так что смело нажимайте кнопку No и вы попадёте на подобие рабочего стола — Pim.
Первый скриншот: программа Memory Status; второй: начальный экран Pim в OPIE.
Кстати, в окне Memory Status будет показано, подключился ли swap-раздел, если вы, конечно, разбили свою карту памяти на разделы. Как видно на скриншоте выше, у меня он успешно подключился. Вы уже могли заметить, что реализация рабочего стола OPIE основана на нескольких вкладках, разделенных на категории Applications, Games, Settings» и несколько других. В нижней части экрана располагается своеобразная панелька и трей с Applet’ами. В её левой части имеется кнопка вызова главного меню, она стилизована под логотип OPIE — голубую букву O. Это меню выполнено в стиле классического и привычного всем «Пуска», как на операционных системах MS Windows. С помощью Applet’ов можно совершать какие-либо действия, требующие быстрого доступа. К примеру, есть возможность моментально сделать снимок экрана и сохранить его в домашнюю директорию. Помимо этого на нижней панели располагается иконка метода ввода, по клику на которую вызывается клавиатура. А нажав на стрелочку рядом с ней можно изменить метод ввода символов. Нормально заработали только два метода — «ручной ввод», несколько бессмысленный на Ritmix RZX-50, и «JumpX» — небольшая клавиатурка со своеобразной раскладкой. Остальные методы ввода тоже весьма интересные, но, к сожалению, из-за них сегфолтится Launcher и их пришлось удалить из образа OPIE. Кстати, существует возможность развернуть экран вертикально, для этого стоит выбрать пункт Rotate в главном меню.
Первый скриншот: опция Rotate; второй: виртуальная клавиатура с методом ввода «JumpX».
В некоторых приложениях оболочки OPIE пиктограммы элементов выглядят просто ужасно, поскольку они очень небольшого разрешения. С этим, к сожалению, ничего поделать нельзя.
1.1. Программы, идущие в стандартной поставке с OPIE
Теперь давайте пройдемся по вкладкам начального экрана, которые содержат какие-либо программы. На вкладке Pim сосредоточены специальные приложения, которые работают с персональной информацией пользователя устройства. Из них более-менее рабочими оказались следующие:
- Calendar: достаточно мощный календарь;
- Contacts: мощный справочник;
- Draw Pad: простенькая программа для зарисовок;
- Notes: стандартная программа для манипулирования заметками;
- Search: поиск по документам и файлам приложений;
- Todo List: список дел.
Внешний вид приложения Calendar.
Для остальных ярлыков на вкладке Pim банально отсутствуют исполняемые файлы или приложения, запускаемые ими, очень нестабильно работают.
Следующая вкладка называется Applications и на ней собраны непосредственно все пользовательские приложения OPIE. Отметим наиболее интересные и рабочие среди них и немного опишем их предназначение:
- Backup & Restore: создание и восстановление резервной копии личных файлов и настроек OPIE;
- Bartender: множество рецептов различных коктейлей на английском языке;
- Console: простейший терминал;
- Konsole: зачаток стандартного KDE’шного терминала, перенесенный в OPIE;
- File Manager: мощный двухпанельный файловый-менеджер с ужасным интерфейсом;
- Opie Sheet: редактор простых электронных таблиц;
- Oxygen: классная периодическая таблица химических элементов;
- Text Editor: простенький текстовый редактор;
- TinyKATE: сильно кастрированный редактор текста Kate из KDE с подсветкой синтаксиса;
- System Info: просмотр системных характеристик устройства;
- ZSafe: программа для хранения документов.
Первый скриншот: программа-справочник по химическим элементам Oxygen; второй: эмулятор терминала Konsole.
Особо отмечу приложение System Info, предлагающее пользователю не только посмотреть подробную информацию о системе, на которой запущена OPIE, но и возможность сравнить производительность девайса посредством простых Benchmark’ов с другими устройствами, которые когда-то могли запускать эту графическую оболочку.
Программа System Info, на втором скриншоте во второй колонке таблицы результаты Benchmark’ов Ritmix RZX-50.
Кстати, приложение Calculator, доступное на вкладке Applications, имеет весьма удобный встроенный конвертер различных величин.
Первый скриншот: редактор кода TinyKATE; второй: программа System Info, отображение команды dmesg.
Другие приложения на этой вкладке мной просто не протестированы, так как у многих ярлыков отсутствует исполняемый файл.
Остальные вкладки содержат различную мишуру. Например, вкладка Examples содержит примеры приложений и Hello World’ы, исходный код которых можно найти в каталоге «~/opiehome/opie/examples». Вкладка Opie-SH должна содержать скрипты, которые обращаются к специальному файлу для реализации простейших графических интерфейсов. Но увы, они отсутствуют. Кстати, подобные схемы построения интерфейсов я уже видел в кастомных прошивках некоторых телефонов Motorola, работающих под управлением GNU/Linux, там они назывались Show Modules. Их смысл таков: есть исполнительный файл (собственно сам Show Module), который принимает на вход множество аргументов, к примеру, количество вкладок, названия и количество кнопок, флажков и прочих элементов мобильного интерфейса. Затем, в зависимости от нажатых кнопок или выбранных флажков, выполнение Show Module завершается тем или иным кодом возврата, который обрабатывается скриптом. Таким образом, приложение с GUI может быть создано без единой строчки компилируемого кода, лишь на скриптах командной оболочки, дергающих необходимые Show Modules. Лично мне не очень нравится подобный подход, так как отзывчивость подобных приложений оставляет желать лучшего.
Программа System Info: просмотр информации о памяти и процессоре.
Вкладка Python видимо должна была содержать примеры приложений, построенных на основе привязок языка программирования Python к библиотеке Qt/Embedded. Увы, она тоже пуста.
Вкладка Unsupported содержит приложения, которые создатели OPIE перестали со временем поддерживать. Нормально работающих программ там только две:
- Image Viewer: программа для просмотра изображений;
- uBrowser: простейший HTML-браузер.
1.2. Игры, идущие в стандартной поставке с OPIE
Само собой, все игры размещены на вкладке Games, большинство из них довольно неплохо работают. Отмечу наиболее интересные:
Первый скриншот: содержимое вкладки Games; второй: классический пасьянс «Косынка».
- ZSame: вариация игры Jewels;
- ZLines: всем хорошо известная игра Lines про линии из цветных шариков;
- Tictac: крестики-нолики;
- Tetrix: простейший тетрис;
- Snake: обычная змейка;
- ParaShoot: аналог игры Missile Command.
Кроме этого стоит упомянуть стандартный набор — шашки, нарды, го, различные пасьянсы. Очень интересна игра kBill, где вы должны оберегать компьютеры от сумасшедшего хакера по имени Билл, который пытается установить странный вирус на компьютеры с операционными системами Mac OS X, GNU/Linux и FreeBSD.
Первый скриншот: аналог всем известных линий ZLines; второй: классическая игра го; третий: шашки, портированные на OPIE из проекта KDE.
1.3. Возможности настройки OPIE
На вкладке Settings вы можете настроить работу OPIE на Ritmix RZX-50. Внешний вид заголовка окна, темы интерфейса и виджеты настраиваются в приложении Appearance, а количество вкладок и пункты главного меню изменяются в Launcher. Перезагрузить устройство в родную операционную систему можно пунктом Shutdown, расположенным тоже на этой вкладке. Хотелось бы обратить внимание на то, что OPIE поддерживает отображение в интерфейсе шрифтов со сглаживанием.
Первый скриншот: содержимое вкладки Settings; второй: приложение Appearance, используемое для настройки внешнего вида интерфейса.
На вкладке Documents располагаются все созданные вами личные документы в одной общей куче. Их можно просмотреть в какой-либо программе или отредактировать. Эта вкладка является аналогом домашнего каталога в дистрибутивах GNU/Linux, только здесь нет структурирования на директории.
2. Установка образа OPIE на Ritmix RZX-50
Мной уже собрана несколько «сырая» версия OPIE и небольшой дистрибутив rootfs, позволяющий запустить эту графическую оболочку с внешней карты памяти прямо из меню консоли RZX-50. За основу всей этой сборки взят порт OpenDingux‘a от Antony и его патчи к ядру.
В ядре активирована опция swap. Вы можете разбить карту памяти на разделы (добавить swap-раздел) с помощью утилиты fdisk прямо на устройстве и он автоматически подхватится после перезагрузки гаджета.
Кроме этого мной был немного доработан демон pwswd, отвечающий за перехват последовательностей нажатия ползунка Power и любой кнопки консоли. Модифицировано было следующее:
- Поскольку OPIE управляется в основном сенсорным экраном или курсором мыши, по умолчанию используется именно режим эмуляции мышки;
- Добавлена простейшая возможность регулировки скорости движения курсора;
- Исправлен баг, связанный с кривым снятием скриншотов, отмеченный здесь.
Для установки нужно скачать архив и распаковать его в корень карты памяти следующим образом:
Необходимая структура файлов после распаковки архива на карту памяти.
Для запуска OPIE необходимо нажать на файл startopie.dge из проводника на самом устройстве. Через несколько секунд система должна запуститься.
3. Сборка OPIE из исходного кода и создание образа с файловой системой
3.1. Настройка рабочего окружения
Первым делом нужно сверить версии компиляторов и скачать все необходимые инструменты для разработки. Лучше всего, если хостовый компилятор gcc будет версией пониже, желательно не выше, чем:
1 2 |
$ gсс --version gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1 |
Но и не ниже, чем 4.3.x. Это избавит от многих проблем при компиляции. Дело в том, что собираемые проекты создавались во времена ранних четвертых версий gcc, поэтому на последних версиях компилятора некоторые части проекта могут просто не собраться.
Для сборки OPIE в системе должны быть установлены следующие пакеты:
1. g++ (для систем с apt, необходимо выполнить команду sudo apt-get install g++). Примечание: для компилятора gcc-4.4.1 необходимо использовать старые версии программ, поэтому нужно добавить репозитории содержащие их, вручную. К примеру, для систем на основе популярного дистрибутива Ubuntu достаточно отредактировать от рута файлик «/etc/apt/sources.list», добавив туда следующие строки:
1 2 3 |
deb http://old-releases.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse deb http://old-releases.ubuntu.com/ubuntu/ gutsy-updates main restricted universe multiverse deb http://old-releases.ubuntu.com/ubuntu/ gutsy-security main restricted universe multiverse |
И закомментировать остальное содержимое. После сохранения файла можно смело выполнять обновление списка доступных пакетов в репозитории и установку компилятора g++:
1 2 |
$ sudo apt-get update $ sudo apt-get install g++ |
Установленная версия g++:
1 2 |
$ g++ --version g++ (GCC) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2) |
2. make (для систем с apt, необходимо выполнить команду sudo apt-get install make). Установленная версия утилиты make на моем хосте:
1 2 |
$ make --version GNU Make 3.81 |
Но можно использовать make любой версии, например, предустановленной в вашем дистрибутиве.
3. ncurses и ncurses-dev (для систем с apt, необходимо выполнить команду sudo apt-get install ncurses-dev). Установленные версии этих библиотек на моём хосте:
1 2 |
$ ncurses5-config --version 5.7.20090803 |
Примечание: пакет ncurses-dev часто изначально предустановлен в дистрибутивы GNU/Linux.
Хост, а точнее виртуальная машина, на которой я собирал OPIE, была развернута внутри VMWare Player в операционной системе Windows 7. Ей было выделено 2 GB RAM, и два ядра процессора Intel Core 2 Duo E8200. Для обеспечения приемлемой производительности использовалась фирменная технология аппаратной виртуализации от Intel — VT-x. В виртуальную машину был установлен когда-то популярный 32-битный дистрибутив GNU/Linux — Linux Mint 8 KDE:
1 2 |
$ uname -a Linux exl-pc-mint 2.6.31-16-generic #53-Ubuntu SMP Tue Dec 8 04:01:29 UTC 2009 i686 GNU/Linux |
Скачать установочный образ этого дистрибутива можно по этой ссылке.
3.2. Загрузка и установка SDK для Ritmix RZX-50
Загрузить средства разработки под Ritmix RZX-50 можно на официальной страничке устройства: прямая ссылка для загрузки. Версия кросс-компилятора для MIPS-процессора RZX-50, который включен в SDK:
1 2 |
$ mipsel-linux-uclibc-gcc --version mipsel-linux-uclibc-gcc (GCC) 4.3.3 |
Установка SDK для Ritmix RZX-50 в хостовую систему производится следующими командами:
1 2 3 4 |
$ cd ~/Downloads/ $ unzip RZX-50_SDK.zip $ cd SDK_for_ritmix_rzx-50/ $ sudo tar -jxvf Toolchain-mipsel-linux-uclib/mipsel-linux-uclibc.tar.bz2 -C /opt |
Перед компиляцией проектов, нужно добавить в переменную окружения PATH путь до директории с кросс-компиляторами. Это можно сделать с помощью скрипта mips-env.sh:
1 2 |
$ cd ~ $ echo -e '#!/bin/sh\nexport PATH=/opt/mipsel-linux-uclibc/usr/bin:$PATH' > mips-env.sh |
Скрипт нужно будет подгружать для каждого консольного сеанса следующей командой:
1 2 |
$ cd ~ $ . mips-env.sh |
Или же можно просто добавить необходимую строку в файл .bashrc:
1 2 3 |
$ cd ~ $ echo "export PATH=/opt/mipsel-linux-uclibc/usr/bin:$PATH" >> .bashrc $ source .bashrc |
Сделайте так, как вам удобно, главное, чтобы при кросс-компиляции из переменной PATH был доступ к необходимым кросс-компиляторам.
Подробная инструкция по компиляции OPIE для архитектуры x86, имеется на официальном сайте проекта: opie.sourceforge.net. Для RZX-50, с архитектурой процессора MIPS, необходимо помнить о кросс-компиляции.
3.3. Настройка окружения и сборка OPIE
Итак, загружаем необходимые исходники по следующей ссылке и распаковываем их в каталог «~/Projects»:
1 2 3 |
$ cd ~/Downloads $ mkdir ~/Projects; mv master.zip ~/Projects/; cd ~/Projects $ unzip master.zip |
После успешного выполнения команд выше нужно настроить среду для сборки OPIE. Для этого нам необходимо определить несколько переменных окружения и создать несколько симлинков:
1 2 3 4 5 6 7 |
$ cd ~/Projects/opiehome/ $ export OPIEDIR=~/Projects/opiehome/opie $ export QTDIR=~/Projects/opiehome/qt-2.3.10 $ ln -s ~/Projects/opiehome/qt-2.3.10/bin ~/Projects/opiehome/tmp/staging/i686-linux $ ln -s /opt/mipsel-linux-uclibc/usr/bin ~/Projects/opiehome/tmp/cross $ ln -s ~/Projects/opiehome/qt-2.3.10/include ~/Projects/opiehome/tmp/staging/mipsel-linux/qt2 $ sudo ln -s /opt/mipsel-linux-uclibc/usr/include/freetype2/freetype /opt/mipsel-linux-uclibc/usr/include/freetype |
В начале собираем необходимую для работы OPIE библиотеку Qt/Embedded 2.3.10:
1 2 3 4 |
$ cd $QTDIR $ ./configure -xplatform linux-mips-g++ -qconfig qpe -depths 4,16,24,32 -system-jpeg -system-libpng -system-zlib -no-xft -qvfb # Соглашаемся с условиями лицензии (вводим yes) $ make |
После успешной компиляции копируем библиотеки и добавляем в переменную PATH путь до каталога с исполнительными файлами:
1 2 |
$ cp -R $QTDIR/lib/* $OPIEDIR/lib $ export PATH=$QTDIR/bin:$PATH |
Для конфигурирования OPIE воспользуемся командами:
1 2 |
$ cd $OPIEDIR $ make menuconfig |
Конфигуратор OPIE, использующий ncurses-интерфейс.
В появившемся ncurses-интерфейсе выбираем пункт меню «Load An Alternative Configuration File» и вводим там «rzx50_defconfig»:
Конфигуратор OPIE, использующий ncurses-интерфейс.
После этого можно выходить из конфигуратора, нажав клавишу Esc и не забыв сохранить конфиг. Теперь для сборки OPIE необходимой конфигурации можно просто выполнить команду:
1 |
$ make |
Примечание: тут команду make необходимо использовать без аргумента распараллеливания -jN. Собирается OPIE на моей конфигурации примерно 20-30 минут.
3.4. Сборка образа файловой системы с OPIE
Так как графическая оболочка состоит из множества мелких файлов, логичнее всего создать образ с файловой системой, который будет содержать их все в себе. Для этого создадим файл «~/Projects/opie» размером в 140 МБ и создадим в нем файловую систему с помощью следующих команд:
1 2 3 |
$ cd ~/Projects $ dd if=/dev/zero of=opie bs=140M count=1 $ mkfs.ext2 opie |
Далее смонтируем образ файловой системы в каталог «~/Projects/OpieRelease» и скопируем в него необходимые системные файлы:
1 2 3 4 5 |
$ cd ~/Projects $ mkdir ~/Projects/OpieRelease $ sudo mount -o loop opie OpieRelease/ $ cd $OPIEDIR $ cp -R apps/ bin/ doc/ docs/ etc/ help/ i18n/ lib/ pics/ pics-hires/ plugins/ root/ share/ sounds/ ~/Projects/OpieRelease/ |
Затем отмонтируем файл и проверим его на ошибки:
1 2 3 |
$ cd ~/Projects $ sudo umount OpieRelease/ $ e2fsck -y opie |
Полученный системный образ файловой системы «~/Projects/opie» готов к использованию в Ritmix RZX-50. Осталось лишь скопировать его на карту памяти и запустить скриптом startopie.dge.
4. Заключение, вердикт
Стоит ли использовать OPIE на Ritmix RZX-50? Это спорный вопрос, лично я бы не стал, уж слишком он выглядит сыро. Хотя несколько интересных приложений там есть, к примеру: пасьянсы, настольные игры, нормальный терминал и текстовый редактор. Если у кого-то появится желание доработать эту сборку хотя бы до более-менее приемлемого состояния — я буду только рад. А пока образ OPIE является лишь демонстрационным, предназначенным скорее для ознакомления, чем для полноценного повседневного использования.