68 posts tagged

OrangePI PC

Ctrl + ↑ Later

Real Time Kernel and LinuxCNC на Orangepi

Real Time Kernel – система должна гарантировать время реакции ,чтобы уменьшить задержки, количество процессов необходимо свести к минимуму. Для этого нужно не только убрать все лишние программы и отключить все неиспользуемые демоны, но и пересобрать ядро, оставив лишь действительно необходимый функционал.
LinuxCNC – универсальная программа, которая может управлять фрезерно-гравировальным станком, лазерной и плазменной резкой, а так же любыми другими станками.

собирал armbian на Win10 с VirtualBox + Ubuntu 16.04 x64 Developer-Guide_Build-Preparation

RT патч для версии ядра 4.13 RT патч

Собранный имидж с RT патчем для OrangePi-PC Armbian_5.34_Orangepipc_Debian_jessie_next_4.13.8-rt1_desktop

Сборка LinuxCNC на этом имидже :

sudo apt install cython uuid-runtime libtool  libgl1-mesa-dev libglu1-mesa-dev libudev-dev intltool python-pip libjansson-dev liburiparser-dev libwebsockets-dev uuid-dev libavahi-client-dev libprotobuf-dev protobuf-compiler libmodbus-dev libglib2.0-dev libgtk2.0-dev tcl-dev tk-dev libreadline-gplv2-dev gettext python-tk -y libboost-python-dev libboost-serialization-dev libboost-thread-dev bwidget libtk-img tclx  libxaw7-dev libc6  libgcc1   libudev1  libuuid1  libzmq3  yapps2-runtime

собираем от user (не от root`a)

git clone git://github.com/linuxcnc/linuxcnc.git linuxcnc-dev
cd linuxcnc-dev/src
./autogen.sh 
./configure --with-realtime=uspace
make
sudo make setuid

запуск теста:

~/linuxcnc-dev/scripts/latency-test

Тема на форуме cnc-club.ru LinuxCNC + Orange Pi

2017   armbian   LinuxCNC   OrangePI PC   Real Time Kernel

OrangePi, CoovaChilli and Freeradius for a Wifi Hotspot with captive portal

Как работает Captive Portal
Все пользователи, которые хотят подключиться к публичной Wi-Fi-сети и выйти в интернет, вначале проходят через шлюз, который представляет собой комп с несколькими сетевыми интерфейсами. Шлюз действует как маршрутизатор и брандмауэр, а для возможности авторизации пользователя при помощи браузера он содержит еще и веб-сервер. Для аутентификации клиентов может использоваться внутренняя база данных или внешний RADIUS-сервер. Все пакеты от «неавторизованных» пользователей помечаются на брандмауэре, и посетитель переправляется на специальную веб-страницу (Captive Portal), где он может ознакомиться с условиями подключения и ввести логин/пароль (либо код доступа). После аутентификации пользователя производится идентификация компьютера, за которым он работает, его МАС- и IP-адреса заносятся в белый список брандмауэра. В самом простом случае пользователь может вообще не проходить аутентификацию, Captive Portal автоматически получает IP- и MAC-адреса компьютера, которые сразу подставляются в правилах брандмауэра. В последующем все пакеты проходят через маршрутизатор без ограничений. Дополнительно, в зависимости от роли, могут устанавливаться ограничения по скорости, времени, трафику или посещаемым ресурсам.

Скрипт для автоматической установки ChoovaChilli , RADIUS, LAMP и точки доступа WIFI

wget https://raw.githubusercontent.com/ua3nbw/opihotspot/master/opihotspot_debian.sh
chmod +x opihotspot_debian.sh
./opihotspot_debian.sh

Тестировал на Armbian_5.25_Orangepipc_Debian_jessie_default_3.4.113 и на Armbian_5.33_Orangepipc_Debian_jessie_next_4.13.4
скрипт в процессе установки может потребовать перезагрузить систему, лог можно наблюдать открыв в другом терминале :

sudo tail -f /var/log/opihotspot.log

phpmyadmin поднимется по адресу : http://Ваш_ip_адрес//phpmyadmin
логин: root
пароль: orangepi
веб интерфейс для FreeRadius поднимется по адресу : http://Ваш_ip_адрес/daloradius
логин: administrator
пароль: radius
для тестов заведён пользователь: test

после подключения к точке доступа: SSID=OPIhotspot
Username: test Password: test

2017   Apache   armbian   ChoovaChilli   MySQL   OrangePI PC   PHP   Radius

Кусок блокнота(10)

Посмотреть занимаемое папками место в Linux можно…

Введя всего одну команду

du -sh /путь к нужной папке/*

Например:

du -sh /* — покажет размер всех папок внутри корневой

Найти 10 самых больших фалов, начиная с ‘/’ (корня)

find / -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}'

Слова насилуют разум, мешая рассуждению, увлекая людей бесчисленными противоречиями и неверными заключениями.
Бэкон


Как загрузить файл на удаленный FTP из командной строки
Проще всего с помощью curl:

curl -T my-local-file.txt ftp://ftp.example.com --user user:secret

Эта команда загрузит файл в корневую директорию на удаленном FTP сервере.


OpenDNS – альтернатива гугловским DNS серверам
Все мы привыкли к гугловским DNS – 8.8.8.8 и 8.8.4.4. Легко запомнить и использовать.
Есть альтернатива – OpenDNS. Это проект, ориентированный на секьюрити. Более подробно о нём можно прочитать на официальном сайте . Здесь же оставлю адреса DNS-серверов для быстрого “вспоминания”:
208.67.222.222
208.67.220.220


Как сделать PDF документ из файлов картинок .jpg в Linux
Утилита convert содержится в пакете ImageMagick. Если его еще нет в системе, то устанавливаем.
Для Debian/Ubuntu:

apt install imagemagick
convert *.jpg document.pdf

Ждем некоторое время пока команда выполнится. Всё, PDF документ готов.


Сегодня Фредди Меркьюри исполнился бы 71 год. Живое радио Фредди Меркьюри


2017   armbian   OrangePI PC   блокнот

Принцип «бритвы Оккама» . Подключаем вентилятор

То есть из нескольких решений выбирай простейшее.
Для включения вентилятора можно использовать полевик или биполярник:

Требуется паяльник , чтоб подключить транзистор для управления вентилятором. Если включили паяльник, то можно добавить p-n-p транзистор и терморезистор.
Нам не нужны OPi GPIO и ковыряние в *.fex
Предлагаю подключение вентилятора

терморезистор 4-10k (использовал встроенный от аккумулятора шуруповерта ), mosfet любой, p-n-p транзистор и диод любой
терморезистор приклеиваем к процессору или к радиатору (если есть )

Для тестирования запустим Stress Tests with cpuburn-a7

git clone https://github.com/ssvb/cpuburn-arm.git
cd cpuburn-arm
gcc -o cpuburn-a7 cpuburn-a7.S
./cpuburn-a7

в другом терминале:

armbianmonitor -m

Возникает закономерный вопрос, а, собственно, почему надо делать именно так, а не иначе? Да, «бритва» Оккама позволяет экономить усилия, но разве она гарантирует верный результат? Грубо говоря, вам, что надо: проще или правильней?
В неявном виде «бритва» Оккама отрицается в действительно серьезной науке.
Но, «не следует множить сущее без необходимости»
(либо «не следует привлекать новые сущности без крайней на то необходимости»). Этот принцип формирует принцип бережливости, или закон экономии.

2017   armbian   OrangePI PC

Управление LMS on the OrangePI при помощи энкодера

Дополнение для Logitech Media Server (LMS) on the OrangePI PC

Регулирует громкость и при нажатии кнопки энкодера включает паузу.
Энкодер с кнопкой удалось подключить без использования подтягивающих резисторов, работает на прерываниях очень стабильно, cpu вообще не грузит, загрузка памяти 0.1%, наводки на монтаж отсутствуют.
Проверял с проводами к энкодеру в 20 см.

Тестировал на ARMBIAN 5.31 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun8i

root@orangepipc:~# uname -a
Linux orangepipc 3.4.113-sun8i #18 SMP PREEMPT Thu Jun 15 02:16:06 CEST 2017 armv7l GNU/Linux

Используем библиотеку WiringOtherPi
ставим WiringOtherPi :

git clone https://github.com/lanefu/WiringOtherPi.git
cd WiringOtherPi
sudo ./build
cd ..

в основе код drogonа, автора Wiring Pi с форума https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=125225

#include <stdio.h>
#include <errno.h>
#include <wiringPi.h>

#define   PIN_A   8
#define   PIN_B   9
#define BUTTON_PIN 7

#define   DEBOUNCE   5

static volatile int counter ;
// -------------------------------------------------------------------------
// the event counter
volatile int eventCounter = 0;

void myInterrupt(void) {
  eventCounter++;
}

// -------------------------------------------------------------------------
void encoder (void)
{
  static unsigned int debounce = 0 ;

// If PIN_A is high then ignore it
//   This may be due to bouncing, or a bug/feature of the edge detect

  if (digitalRead (PIN_A) == HIGH) return ;

// Ignore multiple interrupts inside our debounce time

  if (millis () < debounce) return ;
  if (digitalRead (PIN_B) == LOW)   // Anti-clockwise
    --counter ;
  else
    ++counter ;
  debounce = millis () + DEBOUNCE ;
}

int main ()
{
  int last ;
  last = counter = 0 ;
  wiringPiSetup () ;
    pinMode(PIN_A, INPUT);
    pinMode(PIN_B, INPUT);
    pullUpDnControl(PIN_A, PUD_UP);
    pullUpDnControl(PIN_B, PUD_UP);
// -------------------------------------------------------------------------
  pinMode(BUTTON_PIN, INPUT);
  pullUpDnControl (BUTTON_PIN, PUD_UP) ;
  wiringPiISR (BUTTON_PIN, INT_EDGE_FALLING, myInterrupt) ;
 // -------------------------------------------------------------------------

  wiringPiISR (PIN_A, INT_EDGE_FALLING, encoder) ;

  printf ("\nRunning... \n") ;

  for (;;)
  {
// -------------------------------------------------------------------------
    if (eventCounter != 0) system("curl http://192.168.0.3:9000/status.html?p0=pause");
    eventCounter = 0;
// -------------------------------------------------------------------------
    if (counter != last)
    {
    if (counter > last) system("curl  'http://192.168.0.3:9000/status.html?p0=mixer&p1=volume&p2=%2B5'");
    if (counter < last) system("curl  'http://192.168.0.3:9000/status.html?p0=mixer&p1=volume&p2=-5'");
    last = counter ;
    }
// -------------------------------------------------------------------------
    delay( 100 ); // wait 0.1 second
// -------------------------------------------------------------------------
    
  }

  return 0 ;
}

Для компиляции этого кода скачаем исходник:

wget https://raw.githubusercontent.com/ua3nbw-cf/gpiokey/master/encoder.c

меняем в коде 192.168.0.3 на свой IP адрес и компилируем:

gcc -o encoder encoder.c -lpthread -lwiringPi -lwiringPiDev

запуск

./encoder
2017   armbian   GPIO   Logitech Media Server   OrangePI PC

Кусок блокнота(9)

but standart online resize work.

first create backup image then:

sudo cfdisk /dev/mmcblk0

delete partition and re-create (this can be risky, parttition mist start from same sector – in this case 2048), save and then:

sudo resize2fs /dev/mmcblk0p1

if resize2fs can’t resize, reboot and run resize2fs again

then you can check disk at next boot:

sudo touch /forcefsck

Чтобы сделать из netcat http сервер для одного файла:
на клиенте достаточно в браузере набрать http://Ваш_IP:8080

#!/bin/bash
while true
do 
  (echo -e "HTTP/1.1 200 OK\nContent-Type: text/plain\nContent-Length: $(wc -c < Auto_IPTV.m3u)\n\n"; cat Auto_IPTV.m3u) | nc -l -p 8080 > /dev/null
done

Для просмотра информации о погоде в текущем городе или с указанием города (и
при необходимости страны через запятую) для просмотра информации в другом городе:

curl wttr.in

Парсинг csv на bash

#!/bin/bash
URLS=""
HREF=""
INPUT=1.csv
OLDIFS="$IFS"
ICON="fa fa-bullhorn"
IFS=';'
rm build/1.list
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read NAME PERIOD PRICE_1 TSENA colummnt BEGINBLOCK ENDBLOCK
do
	echo "Наименование : $NAME "
	echo "Длительность : $PERIOD часов"
	echo "Цена1 : $PRICE_1 рублей"
	echo "Цена2 : $TSENA"
	echo "Ячейка : $colummnt"
	echo "Начало_блока : $BEGINBLOCK"
	echo "Конец_блока : $ENDBLOCK"
done < $INPUT
IFS=$OLDIFS
leafpad build/1.list
2017   armbian   OrangePI PC   блокнот

LMS on the OrangePI (Armbian Ubuntu xenial)

Logitech Media Server (LMS) Ставил на Armbian_5.25_Orangepipc_Ubuntu_xenial_default_3.4.113_desktop

apt-get update && apt-get upgrade -y

Ночные сборки Logitech Media Server: Debian Installer Package (ARM)
http://downloads.slimdevices.com/nightly/?ver=7.9

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

latest_lms=$(wget -q -O - "http://www.mysqueezebox.com/update/?version=7.9.1&revision=1&geturl=1&os=deb")
mkdir -p /tmp/sources && cd /tmp/sources
wget $latest_lms
lms_deb=$(echo $latest_lms|cut -d "/" -f8)
dpkg -i $lms_deb
service logitechmediaserver stop
wget http://ua3nbw.ru/files/deb/CPAN.tar.gz
tar -xzvf CPAN.tar.gz -C /usr/share/squeezeboxserver

в файл /etc/rc.local вставляем строку:


chown -R squeezeboxserver:nogroup /var/log/squeezeboxserver


запуск сервера:

chown -R squeezeboxserver:nogroup /var/log/squeezeboxserver
service logitechmediaserver start

рулим сервером: http://Ip_вашей_OrPI:9000/

squeezelite для Ubuntu

Аудио плеер squeezelite с дополнительными опциями – поддержка ffmpeg, lirc, DSD over PCM (DoP).

встроена опция -S Absolute path to script to launch on power commands from LMS
для вкл/выкл плеера в LMS. Что-бы включать выключать усилитель мощности.

wget http://ua3nbw.ru/files/deb/squeezelite_ubuntu.tar.gz
tar xzvf squeezelite_ubuntu.tar.gz
mv squeezelite /usr/bin
mv gpiopower.sh /usr/local/bin
apt install libflac8 libmad0 libvorbisfile3 libfaad2 libmpg123-0 libavcodec-ffmpeg56 libavformat-ffmpeg56

запуск плеера с опцией S

squeezelite -o hw:CARD=audiocodec,DEV=0 -S /usr/local/bin/gpiopower.sh

редактируя скрипт gpiopower.sh , можно менять GPIO_OUT.
по умолчанию используется 28 нога гребёнки.
логическая единица на этом gpio – сигнал выключения усилителя.

Тут про установку squeezelite на debian Аудио плеер squeezelite с дополнительными опциями.

2017   armbian   Logitech Media Server   OrangePI PC

Кусок блокнота(8)

Мультик по телнету

apt install telnet
telnet towel.blinkenlights.nl

Дата сборки имиджа вашего armbian

cat /etc/armbian.txt  | grep Build

данная команда выводит в консоль загрузку процессора, памяти, pid, и название десяти самых потребляющих ресурсы процессов

echo '%CPU %MEM   PID COMMAND' && ps hgaxo %cpu,%mem,pid,comm | sort -nrk1 | head -n 10

Чиним sources.list в любой Ubuntu

1.Заходим на сайт repogen.simplylinux.ch;
2.Выбираем страну (надо только для выбора сервера, поэтому можно и не выбирать);
3.Выбираем свой дистрибутив (а вот это надо);
4.Ставим галочки на все, что хотим. Тут рекомендую загалить все, что не “3rd Parties Repos”;
5.Посмотреть на список “3rd Parties Repos”, и выбрать свои любимые софтины;
6.Нажать на пимпу “Generate List”.

Вам будет сгенерирован файл sources.list для вашего дистриба со всеми необходимыми репами.
для дистрибутивов Debian https://debgen.simplylinux.ch/


If someone also does not want to create a secondary account just paste this in the console.
more information at /etc/profile.d/check_first_login.sh

rm -f "$HOME/.not_logged_in_yet"

.” Чем больше у меня проблем, тем лучше мои песни “
— Фредди Меркьюри

Свежие посты сместили “живое радио” Фредди Меркьюри

2017   armbian   OrangePI PC   блокнот

Kodi 18 alpha and mpv with Hardware Decoding

Проектом MPV ведётся разработка открытого видеоплеера, построенного на основе ответвления от кодовой базы MPlayer2.
Тестировал на OrangePi PC с armbian “Ubuntu Xenial Legacy 3.4.113 Desktop”, карта 4Gb.
прямая ссылка на имидж armbian для OrangePi PC https://dl.armbian.com/orangepipc/Ubuntu_xenial_default_desktop.7z
после установки системы проверим встроенный плеер mpv, в PyTTY вводим:

DISPLAY=:0 mpv --vo=vdpau --hwdec=vdpau --hwdec-codecs=all --fs  http://ow.ly/10tB0C

Наблюдаем на мониторе, что Big Buck Bunny бегает шустро и в другом терминале htop не зашкаливает нагрузка на ядра процессора, значит Hardware Decoding работает и можно прикрутить MPV в качестве внешнего плеера к Kodi.

apt-get update && apt-get upgrade -y
apt install libpcrecpp0v5 libtag1v5-vanilla libtinyxml2.6.2v5 libmicrohttpd10 libssh-4 libva-drm1

Ставим драйвер mali с поддержкой фреймбуфера

wget http://ua3nbw.ru/files/deb/libmali_f.tar.gz
tar -xzvf libmali_f.tar.gz -C /

и пакет Kodi 18 alfa, с предыдущего поста Kodi 18 alfa на OrangePI PC 

wget http://ua3nbw.ru/files/deb/kodi_201704072156-git-1_armhf.deb
dpkg -i kodi_201704072156-git-1_armhf.deb
reboot

тут интересный момент, даже два, у меня иногда OrangePiPC в этот момент команду reboot воспринимает, как poweroff.
очевидное решение передёрнуть питание и второй момент – коди не запускается, если не инсталлировать какой-нибудь пакет, ну эти пакеты нам необходимы:

apt -y install mesa-utils libx11-dev libxext-dev xutils-dev libdrm-dev x11proto-xf86dri-dev libxfixes-dev libcurl3 x11proto-dri2-dev xorg-dev xutils-dev libltdl-dev libtool

ну и запуск kodi:

DISPLAY=:0 kodi

Выходим из kodi: в терминале CTR+C
Быстрая проверка :

DISPLAY=:0 kodi http://ow.ly/10tB0C

Смотрим загрузку CPU и растущую температуру и жмакаем CTR+C, а то перегреется.

Тут про подключение внешнего плеера : External players
для теста создаю файл playercorefactory.xml в /root/.kodi/userdata :

<playercorefactory>
 <players>
  <player name="mpv" type="ExternalPlayer" video="true">
   <filename>mpv</filename>
   <args>--vo=vdpau --hwdec=vdpau --hwdec-codecs=all --fs --sub-auto=all</args>
   <hidexbmc>false</hidexbmc>
   <hideconsole>false</hideconsole>
   <warpcursor>none</warpcursor>
  </player>
 </players>
 <rules action="prepend">
  <rule video="true" player="mpv"/>
 </rules>
</playercorefactory>

перезагружаем kodi и

DISPLAY=:0 kodi http://ow.ly/10tB0C

ну и утки взлетают (файл можно найти в инете)
Ducks.Take.Off.1080p.QHD.CRF25.x264-CtrlHD.mkv

Profit!
Запуск kodi из терминала:

DISPLAY=:0 kodi

Да, коди запускает видео with Hardware Decoding на внешнем плеере, но рулить внешним плеером, пока не удаётся (фокус не передаётся на внешний плеер ), выслушаю ваши мнения в комментариях , возможно решение на поверхности. Спасибо.

2017   armbian   MPV   OrangePI PC

Kodi 18 alpha на OrangePI PC

Без особых проблем собрал пакет «Kodi 18 Leia» на orange pi pc с поддержкой OpenGL ES 2.0.
ffmpeg поддерживает h.265 и h.265 video codec, но для коди это фиалетово, правда можно подключить внешние плеера , у меня работали mplayer и mpv. На Raspberry Pi, тоже используют с kodi внешний плеер, правда все плеера используют исходники ffmpeg.

По сравнению с Kodi 17.1-Krypton, интерфейс у альфы «Kodi 18 Leia» показался полегче . Ну ещё был интерес вставить “ simple PVR tv addon” , ну и звук поправить. после установки аудио идет с HDMI разъёма. CPU temp показывает корректно и т. д. патч от jernej для сборки kodi17 сработал.

Устанавливаем Armbian Ubuntu Server OrangePI PC Armbian_5.25_Orangepipc_Ubuntu_xenial_default_3.4.113.img

Обращаю ваше внимание, все команды я выполняю от root’а на терминале PuTTY .
Если вставили карту, первый раз после записи имиджа,
создайте пароль и нового пользователя, перезагрузитесь и подождите несколько минут для снятия lock.
Немного упростил установку, можно поставить на карту 2Gb:

install required libraries :

apt-get update 
apt -y install mesa-utils libx11-dev libxext-dev xutils-dev libdrm-dev x11proto-xf86dri-dev libxfixes-dev libpcrecpp0v5 libtinyxml2.6.2v5 libpython2.7 libyajl2 libtag1v5-vanilla liblcms2-2 libmicrohttpd10 libssh-4 libxslt1.1 libsmbclient libpulse0 libvdpau1 libva1 libva-drm1 libva-x11-1 libump libdri2-1 libcurl3 x11proto-dri2-dev libfreetype6  xorg-dev xutils-dev libltdl-dev libtool libcdio13

install mali driver и Kodi 18 alfa

mkdir /tmp/kodi_install && cd /tmp/kodi_install
wget http://ua3nbw.ru/files/deb/libmali_f.tar.gz
tar -xzvf libmali_f.tar.gz -C /
wget http://ua3nbw.ru/files/deb/libk_201704072156-git-1_armhf.deb
wget http://ua3nbw.ru/files/deb/kodi_201704072156-git-1_armhf.deb
dpkg -i *.deb

если монитор или телевизор с поддержкой 1080, можно:

h3disp -m 1080p60

и reboot

reboot

ну и запуск:

echo 0 > /sys/class/graphics/fbcon/cursor_blink
kodi
Собирал с опциями:
cmake ..  -DENABLE_OPENGL=OFF -DENABLE_X11=OFF -DENABLE_OPENGLES=ON -DENABLE_VAAPI=OFF -DENABLE_VDPAU=OFF -DENABLE_CEC=OFF -DCPU=cortex-a7 -DWITH_ARCH=arm -DCORE_SYSTEM_NAME=linux  -DLIRC_DEVICE=/run/lirc/lircd

переключить аудио с HDMI на AV можно с помощью файла .asoundrc в директории root.
внешний плеер подключается так : http://kodi.wiki/view/external%20players
пример файла playercorefactory.xml для mpv

<playercorefactory>
<players>
<player name="mpv" type="ExternalPlayer" video="true">
<filename>mpv</filename>
<args>--vo=vdpau --hwdec=vdpau --hwdec-codecs=all --fs --sub-auto=all</args>
<hidexbmc>false</hidexbmc>
<hideconsole>false</hideconsole>
<warpcursor>none</warpcursor>
</player>
</players>
<rules action="prepend">
<rule video="true" player="mpv"/>
</rules>
</playercorefactory>

Ложка дегтя к внешним плеерам, mpv с fbdev не работает (с X неплохо работает), но есть патч для mpv на гите последнее обновление 15 года, для новых версий этот патч не поддерживается. ffmpay тоже в сторонке, mplayer работает, но внутренний плеер kodi, не хуже.
Попробую mpv c simple directMedia layer. Склоняюсь использовать софт, не применяя крайне необходимых патчей. У jernej, ну очень много патчей под определенную версию. Естественно при выходе , допустим свежей и обновленной версии kodi, снова тема на примерно 200 страниц http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=648&extra=page%3D1.

Да в пост добавлю: имидж alfa( как есть, так и есть ) Kodi 18 alfa на OrangePI PC
https://drive.google.com/file/d/0B3COWn8ZF1MBN05lZ28wX1dnWW8/view?usp=sharing
pass:orangepi

2017   armbian   Kodi   OrangePI PC
Ctrl + ↓ Earlier