21.03.2014

3G модем

Временным явлением кубик смотрит в Интернет через ломанный модем: ZTE MF70 unlock

Пакеты для работы с модемом уже есть в Cubieez:
apt-get install usb-modeswitch usb-modeswitch-data
Вставляю модем в USB, убеждаюсь в eth1
dmesg
[   13.13] cdc_ether 1-1.1.1:1.0: eth1: register..........

Правлю IP-адрес
Поднимаю интерфейс:
ifup eth1
И задаю роут:
route delete default
route add default gw 192.168.0.1

По маршрутам почитать: Маршрут по умолчанию

20.03.2014

DynDNS - DuckDNS


duckdns.org

Подготовка/проверка
Стоит ли крон?
ps -ef | grep cr[o]n
Есть ли качалка?
curl

Добавляю пользователя и настраиваю:
adduser douglas
cd /home/douglas
mkdir duckdns
cd duckdns
nano duck.sh
echo url="https://www.duckdns.org/update?domains=exampledomain&token=a7c4d0ad-114e-40ef-ba1d-d217904a50f2&ip=" | curl -k -o /home/douglas/duckdns/duck.log -K -

Добавляю в КРОН:
chmod 700 duck.sh
crontab -e
*/5 * * * * /home/douglas/duckdns/duck.sh

Проверка:
./duck.sh
cat duck.log
Ответ: OK или KO
Если "КО", то проверяем домен и тоукен.
sudo service cron start

https://duckdns.org/domains

Это всё ради проброса портов

18.03.2014

Проброс портов

ZXV10 H201L на my.toilet.server
Хитрость в том, что настроив порт-форвардинг в веб-морде модема, проверять не надо со своего компа.

Наружу пробрасываю SSH, Webmin, видео и аудио потоки, управление MPD.

Если наш Кубик включить в DMZ, то в незащищённую samba шару обязательно полезут трояны.

DynDNS

13.03.2014

Webcam

0. Video
На вебках всё реже пишут про совместимость с Linux. Но обязательно указывают все версии Windows. Даже драйверов на диске нет! Какже быть?
Подключаем не_совместимую с Linux USB-вебку и набираем команду убедиться, что она у нас уже есть в системе:

ls /dev/video*




1. mjpg_streamer - ретранслятор


Качай с источника mjpg-streamer-cubie или с моего MyDrive
Может пригодится оригинал mjpg-streamer-r63

Компиляция и запуск:
cd mjpg-streamer
sudo apt-get install libv4l-dev libv4l-0 libjpeg8-dev imagemagick
make USE_LIBV4L2=true clean all
export LD_LIBRARY_PATH=.
./mjpg_streamer -i "./input_uvc.so -f 30 -r 1280x720" -o "./output_http.so  -p 8080 -w ./www"
Ошибка...
ERROR:
Adding control for Pan (relative)
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Но работает!!!
http://10.10.10.10:8080
top: CPU 3-5%

А если не работает, то, возможно, камера не поддерживает режим. Тогда в командную строку сходу добавляем "-y". Если не получилось, то смотрим режимы внимательней:
sudo apt-get install uvcdynctrl
uvcdynctrl -f

Автозапуск
Создаём файл /etc/init.d/mjpg_streamkick
#!/bin/sh

### BEGIN INIT INFO
# /etc/init.d/mjpg_streamkick
# Provides:          mjpg_streamer.sh
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: mjpg_streamer for webcam
# Description:       Streams /dev/video0 to http://IP/?action=stream
### END INIT INFO

ld_library_path=/home/user/mjpg-streamer
export LD_LIBRARY_PATH ld_library_path
export LD_LIBRARY_PATH=/home/user/mjpg-streamer

NAME=mjpg_streamer
DESC="M-JPEG Streamer"
DAEMON=/home/user/mjpg-streamer/mjpg_streamer
MJPG_QUALITY=85
MJPG_RESOLUTION=800x600
MJPG_FREQ=10
MJPG_VIDEO_DEVICE="/dev/video0 -y"
MJPG_OUTPUT=/home/user/mjpg-streamer/www
MJPG_OUTPUT_PORT=8080
USER_PASS=rv:rv

f_message(){
        echo "[+] $1"
        echo "      "
}


# Carry out specific functions when asked to by the system
case "$1" in
        start)
                f_message "Starting $DESC..."
                $DAEMON -b -i "input_uvc.so -d $MJPG_VIDEO_DEVICE -f $MJPG_FREQ -r $MJPG_RESOLUTION -q $MJPG_QUALITY " -o "output_http.so -p $MJPG_OUTPUT_PORT -w $MJPG_OUTPUT -c $USER_PASS -n "
                sleep 1
  echo ".."
                sleep 1
                f_message "$NAME Started!"
  /etc/init.d/mjpg_streamkick status
                ;;
        stop)
                f_message "Stopping $DESC..."
                killall mjpg_streamer
                f_message "$NAME Stopped!"
                ;;
        restart)
                f_message "Restarting $DESC..."
                killall $NAME
                f_message "$NAME Killing!"
                $DAEMON -b -i "input_uvc.so -d $MJPG_VIDEO_DEVICE -f $MJPG_FREQ -r $MJPG_RESOLUTION -q $MJPG_QUALITY " -o "output_http.so -p $MJPG_OUTPUT_PORT -w $MJPG_OUTPUT -c $USER_PASS -n "
                sleep 1
  echo ".."
                sleep 1
                f_message "$NAME Restarted!"
  /etc/init.d/mjpg_streamkick status
                ;;
        status)
                pid=`ps -A | grep $NAME | grep -v "grep" | grep -v $NAME. | awk '{print $1}' | head -n 1`
                if [ -n "$pid" ];
                then
                        f_message "$DESC Status:"
                        f_message "$DESC is running with pid ${pid}"
                        f_message "$NAME was started with the following command line"
                        cat /proc/${pid}/cmdline ; echo ""
                else
                        f_message "$DESC Status:"
                        f_message "Could not find $NAME running!"
                fi
                ;;
        *)
                f_message "Usage: $0 {start|stop|status|restart}"
                exit 1
                ;;
esac
exit 0

И... Внедряем
sudo chmod 755 /etc/init.d/mjpg_streamkick
sudo update-rc.d mjpg_streamkick defaults 







2. Motion - детектор движения, юзает на входе поток из ретранслятора.
sudo apt-get install motion

Конфигурация:
/etc/motion/motion.conf
netcam_url http://10.10.10.10:8080/?action=stream
width 1280
height 720
framerate 10
webcam_port 8880
webcam_localhost off
control_port 8881
control_localhost off
locate on                  # рисует рамку по движению
target_dir /tmp/motion     # директория для сохранения снапшотов

sudo motion
top: CPU 101-103%

Ещё почитать:

Несколько камер: http://ubuntuforums.org/showthread.php?t=1897786
Motion, использует дополнительные, спицифичные для каждой камеры, конфиги, подключаемые в основном файле конфигурации:
thread /etc/motion/thread0.conf
thread /etc/motion/thread1.conf
thread /etc/motion/thread2.conf

thread1.conf
videodevice /dev/video1
text_left USBWebcam-1
target_dir /home/motion/images/webcam1
webcam_port 8881




Выход в люди:
Port Forwarding
DynDNS

Скорость сети

Intel® NAS Performance Toolkit

Замеряю самбу в рабочем режиме, т.е. не отключая задания в кроне и не делая твиков.

Cubieboard2 / 2012-09-09 / AllWinner A20 ARM Cortex-A7 Dual-Core (habrahabr.ru)
Cubieez 1.1 (A20) - Debian 7.5 Wheezy with kernel 3.4.79
Barracuda 7200.7 120Gb

samba

/etc/samba/smb.conf

[global]
 workgroup = 7EVEN.NET
 netbios name = cubie
 server string = %h server

;    interfaces = lo, 10.10.10.0/24 eth0
 interfaces = lo, eth0
 bind interfaces only = true

 dos charset = cp688
 unix charset = UTF8

 syslog = 0
 log file = /var/log/samba/log.%m
 max log size = 1000

 dns proxy = No
 panic action = /usr/share/samba/panic-action %d

 security = share
# отключаем принтеры 
 load printers = no 
 show add printer wizard = no 
 printcap name = /dev/null 
 disable spoolss = yes 

# по умолчанию все файлы, начинающиеся с точки будут иметь атрибут "скрытый" 
 hide dot files = yes


[share]
 path = /home/user/sata
 comment = Share
 create mode = 0777
 directory mask = 0777
 available = yes
 browsable = yes
 public = yes
 writable = yes
 printable = no
adduser user
sudo smbpasswd -a user
mkdir -p /home/user/sata
chown -R root:users /home/user/sata
chmod -R 0777 /home/user/sata
/etc/init.d/samba restart

Директива security = share устарела, то конфиг для версии старше 4 меняется следующим образом:
[global]
  workgroup = DEAD.NET
  netbios name = cubieboard2
  server string = Samba Server %v

  dns proxy = no
  log file = /var/log/samba/log.%m
  max log size = 1000
  syslog = 0
  panic action = /usr/share/samba/panic-action %d

  server role = standalone server
  security = user
 # Если пользователь Samba существует в системе и введен неверный пароль, 
 # то вход этого пользователя отклоняется, 
 # если пользователя не существует, 
 # тогда ему присваивается статус гость
  map to guest = Bad Password
  passdb backend = tdbsam
  obey pam restrictions = yes
  unix password sync = yes
  passwd program = /usr/bin/passwd %u
  passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
  pam password change = yes
  usershare allow guests = yes
 # по умолчанию все файлы, начинающиеся с точки будут иметь атрибут "скрытый" 
  hide dot files = yes

 # отключаем принтеры 
  #load printers = no 
  #show add printer wizard = no 
  #printcap name = /dev/null 
  #disable spoolss = yes 

  #  SHARE
    [share]
     comment = Share
     path = /mnt/sata
     public = yes
     writable = yes
     available = yes
     browsable = yes
     guest ok = yes
     create mask = 0777
     directory mask = 0777

12.03.2014

Всё о мониторах сюда

  1. VGA
  2. HDMI
  3. LVDS
  4. DUAL
  5. SSH-X11
  6. VNC
disp_init Configuration from Fex Guide

Подключаю матрицу от ноутбука - LVDS

КДПВ

Попал в руки ноутбук китайский не живой.
Разобрал и достал матрицу LP141X7 B1IB (Drive.Google)

Начитался про LVDS.
По идее дифф-сигналы весьма устойчивы к помехам.
В планах пустить кабель на несколько метров из экранированной витухи.
И далее иду за помощью в сообщество Cubieboard+LVDS [cubieforums.com]





 









Адаптирую под себя

Питание матрицы - 3,3 V
EEPROM - нет

Дифф-сигналы:
Матрица LVDS == Cubieboard  -- Цветовая маркировка пар витухи
5 == 4
6 == 1 Коричневый
8 == 6
9 == 3 Оранжевый
11 == 8
12 == 5 Синий
14 == 10
15 == 7 Зелёный

Данные из даташита для правки script.bin

Horizontal Period = 1344
Horizontal Blanking = 136
Vertical Period = 806
Vertical Blanking = 1...24
Clock freq = 65

Как править script.bin можно почитать здесь: VGA
Сама конфигурация начитывается:

[disp_init]
disp_init_enable = 1 
disp_mode = 0
screen0_output_type = 1
screen0_output_mode = 4

[lcd0_para]
lcd_hbp = 136 # Horizontal Blanking
lcd_ht = 1344 # Horizontal Period
lcd_vbp = 24  # 2*Vertical Blanking
lcd_vt = 1612 # 2*Vertical Period
lcd_dclk_freq = 65 # Clock freq
lcd_x = 1024
lcd_y = 768
lcd_if = 3    # its LVDS
lcd_io_cfg0 = 268435456
lcd_hw_if = 0         # parallel
lcd_lvds_bitwidth = 1 # 18 bit 

Инвертор болтается на отдельной плате со светодиодами индикации.
Распиновку разгребал мультиметром. ШИМ по идее у меня не задействован и в конфиге включать его не обязательно.
1 -- +5V
2 -- +5V
3 -- ШИМ (PWM) ???
4 -- +5V (ENABLE)
5 -- D5
6 -- D4
7 -- D3
8 -- D1
9 -- D2
10 -- GRND

И адаптирую к Кубику:
INV == Cubieboard
  3 == 31
  4 == 37

Получается следующий жгут, длиной метра 3-4:
К блоку питания: 3 провода
К Кубику: 3 провода
К Кубику витухой: 4 пары
Итого две витухи? Одна экранированная...
Можно браться за паяльник :)


Витуха медная:
Коричневая пара - 3,3V
Оранжевая пара - 5V
Зелёная пара - GND
Синяя пара - ENABLE 2 Cubieboard + NC



Экранированная витуха:
Цвет - LVDS - Cubieboard
Коричневый - А0 - 4M1P
Оранжевый - А1 - 6M3P
Синий - А2 - 8M5P
Зелёный - CLK - 10M7P
Белые провода - минус (M) дифференциала


Загружаюсь и возвращаю графику в конфиге, если надо.
Наслаждаюсь )))
ENABLE и PWM не подключал, занимательные артефакты при перезагрузке только радуют!





Далее ещё фотки и редизайн коннектора..............



HDMI

[disp_init]
disp_init_enable = 1
disp_mode = 0
screen0_output_type = 3
screen0_output_mode = 5
screen1_output_type = 3
screen1_output_mode = 5
fb0_width = 1024
fb0_height = 768
fb0_framebuffer_num = 2
fb0_format = 10
fb0_pixel_sequence = 0
fb0_scaler_mode_enable = 0

VGA

1.    Распиновка VGA
2.    Распиновка Cubieboard
3.    Схемы
3.1. С конвертером TTL в CMOS (+conf)
3.2. Напрямую и с конвертером и про необходимость конвертора уровней (+conf)
3.3. Напрямую

Буферы ваять не обязательно. Резисторы можно выдрать со старой видеокарточки. У меня даже получилось подпаять! Но патом всё отвалилось с навесного монтажа. Перепаял на обыкновенных резисторах, с ногами. Ну как обыкновенные резисторы? Конские! Да ещё и номинала половинного )))



Конструктивно всё залито эпоксидкой.


Для доступа к конфигурации надо примаунтить NAND командой:
mount /dev/nanda /mnt
И далее правим конфиг:
cp /mnt/script.bin /mnt/script.bin.bck
bin2fex /mnt/script.bin /mnt/script.fex
nano /mnt/script.fex
fex2bin /mnt/script.fex /mnt/script.bin
reboot
Сам конфиг:
[disp_init] 
disp_init_enable = 1 
disp_mode = 0 
screen0_output_type = 4 
screen0_output_mode = 4 
fb0_framebuffer_num = 2  
fb0_format = 10 
fb0_pixel_sequence = 0 
fb0_scaler_mode_enable = 1 


Мой кабель раздраконенный:
R - 1
G - 2
B - 3
HSYNC - 13 - белый
SDA - 12 - оранжевый
SCL - 15 - фиолетовый
+5V - 9 - жёлтый
GRND - 5 - чёрный

Частоты развёрток

В последствии цветной шлейф напаял прямо на видеокарточку старую, там уже распаяны резисторы и есть штекер красивый.

Два монитора

DualMonitorSupport

[disp_init] 
disp_mode = 2 
screen0_output_type = 4 
screen1_output_type = 3 
screen0_output_mode = 11 
screen1_output_mode = 5

VNC Cubieez


/etc/lightdm/lightdm.conf

В нем нашел и исправил строчки:
autologin-user=cubie
autologin-user-timeout=0
[VNCServer]
   enabled=True
   port=5900
   width=1024
   height=768
   depth=8
Пароль задаётся командой от указанного в автологине пользователя:
x11vnc -storepasswd

Ещё почитать: http://www.cubieforums.ru/viewtopic.php?f=13&t=118#p828







И ещё может быть полезно стартовать приложение.
#!/bin/sh
#  ~/.vnc/xstartup
# run chmod +x ~/.vnc/xstartup
 
if [ -z "$VNCAPP" ]
then
  # Uncomment the following two lines for normal desktop:
  # unset SESSION_MANAGER
  # exec /etc/X11/xinit/xinitrc
 
  [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
  [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
  xsetroot -solid grey
  vncconfig -iconic &
  x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
  x-window-manager &
else
  xsetroot -solid black
  vncconfig -iconic &
  x-window-manager &
  $VNCAPP
  sleep 10
  vncserver -kill $DISPLAY
fi

Здесь производится проверка, задана ли переменная окружения “VNCAPP”.
  • Если не задана, поведение скрипта полностью идентично его варианту по умолчанию в текущей версии Debian;
  • Если задана, то запускается указанная в этой переменной программа, а после её завершения делается небольшая пауза и прибивается сам VNC-сервер.

Для использования добавляем в /etc/rc.local следующую строку:

sudo -H -u имяпользователя VNCAPP=/usr/local/foo-programm vncserver -depth 24 

Подсмотрено тут: Запуск GUI-приложений внутри отдельных VNC-сессий

SSH - X11


В Cubieez SSH инэйблится из основной конфигурации
X11 не подключился, хотя в /etc/ssh/sshd_config  
"X11Forwarding yes" уже присутствует.
Для графики X11 через дебаг-кабель или SSH в терминале нужно подправить переменную:
export DISPLAY=127.0.0.1:10.0
Именно IP-адрес!!!
Проверка:
env
echo $DISPLAY
xhost +
И при запущенном Xming из терминала запускаем графическое приложение на Windows-дисплей.

Меняю приветствие, редактируя файл:
/etc/motd

11.03.2014

Время

Задаю часовой пояс
dpkg-reconfigure tzdata
Добавляю сервера:
/etc/ntp.conf
server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 0.ru.pool.ntp.org iburst
server 1.ru.pool.ntp.org iburst
sudo /etc/init.d/ntp start

Шагаем через прокси:
sudo date -s "$(wget -S "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//' | head -1l | awk '{print $1, $3, $2, $5 ,"GMT", $4 }' | sed 's/,//')"

MPD


apt-get install mpd mpc
service mpd stop
sudo nano /etc/mpd.conf

bind_to_address         "any"

audio_output {
        type            "alsa"
        name            "sunxi-codec"
        device          "hw:0,0"        # optional
        format          "44100:16:2"    # optional
        mixer_device    "default"       # optional
}

Ну тут такое.
device     "hw:0,0" - соответствует выходу на джек
device     "hw:1,0" - соответствует выходу на HDMI
mixer_type "software" - позволит управлять громкостью из клиентов
mixer_type "hardware" - НЕ позволит управлять громкостью из клиентов

Настроим потоковое вещание

audio_output {
        type "httpd"
        name "My HTTP Stream"
        encoder "lame"    # optional, vorbis or lame
        port "8000"
        # quality "5.0"     # do not define if bitrate is defined
        bitrate "128"       # do not define if quality is defined
        format "44100:16:2"
}

Кодек:
vorbis=ogg
lame=mp3 

Стоит однако учитывать, что на кодирование OGG пожирается значительно больше CPU. Радио может заикаться на кубике!

Пароли:
  • Раскомментируйте поле "password" и отредактируйте его следующим образом: ПАРОЛЬ@read,add,control,admin - таким образом, при подключении к mpd клиентом с паролем "ПАРОЛЬ" вы получите права на чтение потока и всяческое управление им (добавление/удаление треков, останов/запуск и т.п.)

  • Раскомментируйте поле "default_permissions" и установите его в "read" - таким образом, клиенты, подключившиеся к серверу без пароля, смогут только читать поток

Если настроили доступ по паролю, то и управление через mpc будет выглядеть следующим образом:
mpc --host "password@host" --port 6600 volume 50



Запускаю:

# mpd --create-db - более не актуально
/etc/init.d/mpd start
mpc add http://shoutcast.byfly.by:88/difm_chillout
mpc clear
mpc load playlist_file_name
mpc --host "password@host" --port 6600 play 1

Открывать поток :8000/mpd.ogg в любом плеере.

Количество подключений:
netstat -ant| awk '{print $4}' | grep ":8005$" -c 

И клиент для Винды клиент: Auremo

Armbian / Pulseaudio  

Для настройи выхода MPD на Pulseaudio в конфиге пишем:
audio_output {
        type            "pulse"
        name            "Cubie Pulse Output"
        server          "localhost"             # optional
}

Это создаст Pulseaudio сервер на входе, который можно будет микшировать на любой выход в Volume Control.
Однако, предварительно надо разрешить доступ по сети к локальным аудио-устройствам в настройках Pulseaudio
И что получилось?
На первой картинке MPD играет в хардваре, на второй - в Pulseaudio.


Ощущение, будто Pulseaudio берёт на себя часть работы MPD.
20% + 0% = 20%
16% + 6% = 22%

Общая загрузка камня с вычетом lxtask и Xorg:
29% - 4% = 25%
35% - 9% = 26%

Т.е. использование Pulseaudio подгружает камень слегка, на 1-2 процентика. Думаю, этим можно пренебречь. Красивое отображение амплитуды в Volume Control.

10.03.2014

MPD on Android

Server
  1. aMPD (github / apk / google play)
  2. Music Player Daemon (google play) Как его конфигурировать?
Client
  1. Droid MPD Client (google play)
  2. MPDroid (google play)
  3. MPC (google play)