Search the Community

Showing results for tags 'tutorial'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • Announcements & first aid
    • Announcements
    • Board doesn't start
  • Community forums
    • Common issues
    • Peer to peer technical support
    • Feature Requests
    • TV boxes
    • General chit chat
  • Bug tracker
    • Allwinner A20
    • Allwinner H2 & H3
    • Allwinner H5 & A64
    • Allwinner H6
    • Armada A388, A3700
    • Amlogic S905(x)
    • NXP (Freescale)
    • Rockchip 3288 & 3328
    • Other supported boards
  • Development
    • Rockchip 3399
    • Development

Marker Groups

  • Members

Product Groups

  • Misc


  • Armbian


  • Giveaways


  • Applications


  • Community Calendar

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start





Website URL







Found 72 results

  1. Hello reader I will report here about my experience to watch Netflix as written in the title. To do so, I got a current LE image from @balbes150 (thank you). You may be asking the same question as I do (did), why using the image from balbes and not the official one from the download page ? It is actually quite simple, balbes integrates the latest Kernel for his LE builds. While on a x86 system the kernel isn't so interesting, it is on ARM systems, because a lot of the development happens 1 or 2 year later of the release of the SoC. I have asked him about the different versions he offers for Le Potato: All versions of libreElec (LE) use the common core of aarch64 (64 bits). There is only one 32-bit library (arm) for Netflix. Therefore, I am releasing two versions of LE. ARM version = core of aarch64 + the whole ARM system. aarch64 = core aarch64 + whole system aarch64, this version runs 20-30 % faster than ARM. By the way, it would be interesting to check if Netflix works on Armbian, it may be possible to run it in the environment aarch64 + 32 bit library. So I chose this image: LibreELEC-AMLGX.arm-9.1-devel-20190604084103-a41fdf1-lepotato After writing the image on the SDcard I had to walk through the basic configuration of LE (by the way no SSH - you must use a Display and Keyboard) you find more information here: YouTube A german screenshot film, that guides you through the process of installing the Netflix addon from libdev + jojo + asciidisco Netflix addons; the Kodinerds repository is already part of LE, that saves you some time, update this first. The update and install of the Netflix addon (libdev + jojo + asciidisco), which has some dependencies, is tricky. I had repeated this process several times and a reboot once, because it would only install a few, but not all of the 9 dependencies at once. After 4 or 5 times it confirmed: installed. Now, keep following the YouTube film mentioned above. Adding your credtials to get access to Netflix. WideVine for digital rights mgmnt (DRM), is extracted from ChromeOS - this will download 2Gb Load on the hardware Press the "O" key on the keyboard when playing the video and the service information about the video will be displayed on the screen. It is Software-Decoding for Netflix. 2 cores were running at around 50% and 2 cores were idle (1280 x 720). Testing it on my TV it switched to FullHD at which point it got useless audio and picture were no longer insync. SSH (Secure Shell) During configuration you will see the SSH menu item. You can turn on SSH and you should then change the password!! However, reading the Wiki I got the feeling that this implementation is a bit weird... that said, I would turn it off if you don't need it. WiFi For to me unkown reason the binaries for the USB-WiFi Sticks were removed in 2017: , luckily it is easy to add the driver. cd /storage/.config/ and here you do: mkdir -p firmware and now cd firmware/ unplug your USB-WiFi Stick, plug it in again and do: dmesg | tail -7 you can now see your stick and which binary is missing. Search the binary on this website and complete the line with your binary link: wget reboot no APT There is no working 'apt-get'. TIP: use XBMC's addon browser to enhance your LibreELEC system to be continued
  2. On newer armbian-build it seems that the codec-analog is disabled by default I activated analog-codec in armbian-config ==> System ==> Hardware like in older builds. aplay -l did show the device, but could play. So I did decompile the .dtb with: dtc -I dtb -O dts /boot/dtb/sun8i-h2-plus-orangepi-r1.dtb -o /boot/dtb/sun8i-h2-plus-orangepi-r1.dts Edited the allwinner,sun8i-h3-codec status from disabled to okay: codec@1c22c00 { #sound-dai-cells = < 0x00 >; compatible = "allwinner,sun8i-h3-codec"; reg = < 0x1c22c00 0x400 >; interrupts = < 0x00 0x1d 0x04 >; clocks = < 0x03 0x34 0x03 0x6d >; clock-names = "apb\0codec"; resets = < 0x03 0x28 >; dmas = < 0x14 0x0f 0x14 0x0f >; dma-names = "rx\0tx"; allwinner,codec-analog-controls = < 0x19 >; status = "okay"; phandle = < 0x58 >; }; Then I compiled the .dts back to .dtb: dtc -I dts -O dtb /boot/dtb/sun8i-h2-plus-orangepi-r1.dts -o /boot/dtb/sun8i-h2-plus-orangepi-r1.dtb In armbian-config ==> System ==> Hardware I enabled also usbhost2 & usbhost3 (because no USB-device was recognized at the USB-ports of the NAS-board) and I disabled cir and spi-jedec-nor which I had enabled for a test. After a reboot the soundcard Debian Buster with Armbian Linux 5.3.7-sunxi package bsp-kernel[5.98.191026] u-boot[5.98] dtb[5.98.191026] firmware[5.98] config[5.98] root@opi-r1( aplay -l **** List of PLAYBACK Hardware Devices **** card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 [CDC PCM Codec-0] Subdevices: 0/1 Subdevice #0: subdevice #0 is working again like in older builds The 2nd Ethernet Port Bus 003 Device 002: ID 0bda:8152 Realtek Semiconductor Corp. RTL8152 Fast Ethernet Adapter is also connected via USB, but is allways in the lsusb-list - even when usbhost0-usbhost3 is disabled.
  3. A while ago I did create a armbian-package-information for at the motd of the login: Now the line for the kernel does show 2 versions because there are "Version:" and "Config -Version:" root@npi-neo2-24( dpkg -s linux-image-$BRANCH-$LINUXFAMILY|grep Version Version: 5.96 Config-Version: 5.96 root@npi-neo2-24( dpkg -s linux-image-$BRANCH-$LINUXFAMILY|grep Version|cut -f 2 -d ' ' 5.96 5.96 So I had to find another way/command to get the information once I did go back from "dpkg -s" to "dpkg -l" and greped there the version-info: root@npi-neo2-24( dpkg -l | awk -v env_var="linux-image-$BRANCH-$LINUXFAMILY" '$2==env_var { print $3 }' 5.96 # end-part of /etc/update-motd.d/10-armbian-header # NEW version # =============================================================================================================== ARMBIAN_bsp=$(more /etc/armbian-release|grep VERSION|cut -f 2 -d '=') ARMBIAN_kernel=$(dpkg -l | awk -v env_var="linux-image-$BRANCH-$LINUXFAMILY" '$2==env_var { print $3 }') ARMBIAN_uboot=$(dpkg -l | awk -v env_var="linux-u-boot-$BOARD-$BRANCH" '$2==env_var { print $3 }') ARMBIAN_dtb=$(dpkg -l | awk -v env_var="linux-dtb-$BRANCH-$LINUXFAMILY" '$2==env_var { print $3 }') ARMBIAN_firmware=$(dpkg -l | awk -v env_var="armbian-firmware" '$2==env_var { print $3 }') ARMBIAN_config=$(dpkg -l | awk -v env_var="armbian-config" '$2==env_var { print $3 }') printf 'package bsp-kernel[\e[0;91m%s\x1B[0m] u-boot[\e[0;91m%s\x1B[0m] dtb[\e[0;91m%s\x1B[0m] firmware[\e[0;91m%s\x1B[0m] config[\e[0;91m%s\x1B[0m]\n' "$ARMBIAN_kernel" "$ARMBIAN_uboot" "$ARMBIAN_dtb" "$ARMBIAN_firmware" "$ARMBIAN_config" printf '\n' # =============================================================================================================== After successfully getting the kernel-version only once- I edited the other commands to the "dpkg -l" version - and the result is clear as before _ _ ____ _ _ _ ____ | \ | | _ \(_) | \ | | ___ ___ |___ \ | \| | |_) | | | \| |/ _ \/ _ \ __) | | |\ | __/| | | |\ | __/ (_) | / __/ |_| \_|_| |_| |_| \_|\___|\___/ |_____| Welcome to Debian Buster with Armbian Linux 5.3.3-sunxi64 package bsp-kernel[5.98.191003] u-boot[5.96] dtb[5.98.191003] firmware[5.96] config[5.96] The only drawback is, when you use a dev-kernel/-dtb on a next-installation (using other kernel via armbian-config) then $BRANCH is next and your kernel is dev root@npi-neo2-24( dpkg -l|grep image ii linux-image-dev-sunxi64 5.98.191003 arm64 Linux kernel, version 5.3.3-sunxi64 rc linux-image-next-sunxi64 5.96 arm64 Linux kernel, version 4.19.71-sunxi64 root@npi-neo2-24( dpkg -l|grep dtb ii linux-dtb-dev-sunxi64 5.98.191003 arm64 Linux DTB, version 5.3.3-sunxi64 # ARMBIAN_kernel=$(dpkg -l | awk -v env_var="linux-image-$BRANCH-$LINUXFAMILY" '$2==env_var { print $3 }') ARMBIAN_kernel=$(dpkg -l | awk -v env_var="linux-image-dev-$LINUXFAMILY" '$2==env_var { print $3 }') # ARMBIAN_dtb=$(dpkg -l | awk -v env_var="linux-dtb-$BRANCH-$LINUXFAMILY" '$2==env_var { print $3 }') ARMBIAN_dtb=$(dpkg -l | awk -v env_var="linux-dtb-dev-$LINUXFAMILY" '$2==env_var { print $3 }') PS: I also did try - before this - the package apt-show-versions (lists available package versions with distribution) but this takes much too long to resolve and needs this additionally package
  4. Hi all. I've made a new video on how to share your mouse and keyboard between multiple SBCs with Armbian. This is the source website where I've gotten my info. There is a lot more info to be found on it then I show in the video. Here is my video. Install Barrier sudo apt install snap snapd sudo snap install --edge barrier Run Barrier /snap/bin/barrier Greetings, NicoD
  5. If you use a SIP Voip client on your phone or computer, you can use the sip protocol and scripting to monitor your Armbian board. I'm using Ubuntu Xenial, but other versions should work as well. I have the Linphone client on my phone and I use the free Linphone SIP service. hosts a free SIP service that allows users to make audio or video calls using SIP addresses via the domain You can also send text messages. SIP requires an internet data connection, and my phone is connected via WIFI most of the time except when I'm commuting, so I set up my monitoring chron jobs on the Armbian device to run at times when I'm connected. Set up a SIP account for yourself if you don't yet have one, and set up an account for your device. You can set up free accounts at The example accounts used in this tutorial are: and Replace these with your own accounts. I suggest that you get your Voip service running and tested on your phone and another device or PC before you try and set up SIP scripting on your Armbian device. Install the Linphone console client on your Armbian device (Orange Pi Zero Plus in my case). sudo apt-get install linphone-nogtk When it has installed start the client linphonec You may get a bunch of warnings about unconfigured sound cards and etc. Unless you want to use voice or video, you can ignore these. ........ eventually you will get a linphonec prompt Warning: video is disabled in linphonec, use -V or -C or -D to enable. linphonec> If you type help, you will get a list of commands: linphonec> help Commands are: --------------------------- help Print commands help. call Call a SIP uri or number calls Show all the current calls with their id and status. chat Chat with a SIP uri terminate Terminate a call answer Answer a call pause pause a call resume resume a call transfer Transfer a call to a specified destination. conference Create and manage an audio conference. mute Mute microphone and suspend voice transmission. camera Send camera output for current call. unmute Unmute microphone and resume voice transmission. playbackga Adjust playback gain. duration Print duration in seconds of the last call. autoanswer Show/set auto-answer mode proxy Manage proxies soundcard Manage soundcards webcam Manage webcams ipv6 Use IPV6 nat Set nat address stun Set stun server address firewall Set firewall policy call-logs Calls history friend Manage friends play play a wav file record record to a wav file quit Exit linphonec --------------------------- Now you need to configure your SIP proxy. "help proxy" gives you the relevant commands linphonec> help proxy 'proxy list' : list all proxy setups. 'proxy add' : add a new proxy setup. 'proxy remove <index>' : remove proxy setup with number index. 'proxy use <index>' : use proxy with number index as default proxy. 'proxy unuse' : don't use a default proxy. 'proxy show <index>' : show configuration and status of the proxy numbered by index. 'proxy show default' : show configuration and status of the default proxy. We must use "proxy add". It will start an interactive session. Note the format of the proxy sip address enclosed with < and > linphonec> proxy add Adding new proxy setup. Hit ^D to abort. Enter proxy sip address: <;transport=tls> Your identity for this proxy: Do you want to register on this proxy (yes/no): yes Specify register expiration time in seconds (default is 600): Expiration: 0 seconds Specify route if needed: No route specified. -------------------------------------------- sip address: <;transport=tls> route: identity: register: yes expires: 0 registered: no -------------------------------------------- Accept the above proxy configuration (yes/no) ?: yes Proxy added. linphonec> Password for armdevice on "": Y0uR-pa$$word linphonec> Unregistration on <;transport=tls> done. That's it you are now configured. (not sure what "unregistration" means, perhaps it's a typo and should say registration) Send yourself a test text and quit out of linphonec. Once again "help" is useful: linphonec> linphonec> help chat chat <sip-url> "message"' : send a chat message "message" to the specified destination. linphonec> chat <> "Testing sip messaging" linphonec> terminate No active calls linphonec> quit Terminating... How can you easily send messages from a script? Create a wrapper script using expect (uses tls not bash) If you don't have expect installed then sudo apt-get install expect Create a wrapper expect script called "" #!/usr/bin/expect -f # "this is a message" set message [lindex $argv 0]; spawn linphonec expect "<;transport=tls> done." send "chat <> \"$message\"\r" expect "linphonec>" sleep 10 send "terminate\r" expect "linphonec>" send "quit\r" expect "Terminating..." exit Set execute permission on the file. I placed mine in /usr/local/bin chmod +x /path/to/file # e.g. chmod +x /usr/local/bin/ Now you can execute your wrapper from a script like this and it will send the message to your sip address. Change the path to the location of your wrapper script. /usr/local/bin/ "this is a sip message"
  6. Maybe someone here knows the 8-Bit Guy and the project of his Dream-Computer - the Commander X16 You could see the actual state of the real hardware at YT-Video from the 8-Bit Guy: (Building my Dream Computer - Part 2) Since the hardware isnt ready/completed yet there is a Emulator which uses SDL2 and can be compiled now (since r30) also on Linux ARM Github-page of the emulator: Source: or Linux-Binary for PC including the 2 ROMs: libsdl2-dev hasnt to be compiled from source for armbian, because we have already a installable package and the runtime libsdl2-2.0-0 is already installed in the desktop image. For compiling the Emulator I used on my NanoPi K1 Plus a fresh compiled (with armbian-build-system) dev-image: Armbian_5.97_Nanopik1plus_Debian_buster_dev_5.3.0-rc8_desktop For to have all programs for compiling the application I did use sudo apt install gcc git make libsdl2-dev zip unzip -y Then we do create a directory and download the source and extract it: mkdir x16 cd x16 wget tar -xvf r30.tar.gz Now we change in the newly created directory and do compile with make: cd x16-emulator-r30/ make For running the emulator we do need the 2 ROMs chargen.bin and rom.bin out of the archive in the same directory as the compile x16emu binary. Now we can run the emulator (here with german keymap): ./x16emu -keymap de Unfortunately the emulator doesnt run very fast, do use only one CPU-core and hasnt idle-support - so the CPU will get really fast very hot (70 Degree). A AMD Phenom II X4 with 4x3GHz max. is about 2 times more faster (100%+200%=300%) than the X16 on the NanoPi K1 Plus
  7. For those who like to monitor temperature. Connect SDA & SCL to pins 3 and 5, connect 3.3V and GND. Connect all address wires of the DS1621 to ground. # sudo apt install i2c-tools # echo ds1621 0x48 >/sys/class/i2c-adapter/i2c-1/new_device# cat /sys/devices/platform/ff140000.i2c/i2c-1/1-0048/hwmon/hwmon0/temp1_input Optional, use lm-sensors: # sudo apt install lm-sensors # sensors Optional, temperature logging: Create a file with the following contents: #!/bin/bash echo "`date +%Y-%m-%dT%R`;`cat /sys/devices/platform/ff140000.i2c/i2c-1/1-0048/hwmon/hwmon0/temp1_input`" >>/home/USER/temp Add an entry to /etc/crontab: 0 * * * * USER /home/USER/ And restart cron or your box for logging every hour. Thanks to Hope it's useful for someone!
  8. Hello everyone! Is there anyone who tried to run Docker on armbian? Ok, let's start from the beginning: I am from the Hypriot Team (we made Docker available on ARM) and recently saw some guys successfully playing with Docker on armbian. Meanwhile, we know, that our Docker runs at least on the Cubietrack and Lamobo R1/BananaPi R1 on top of armbian! This is awesome because, you know, IoT is coming, and Docker on ARM helps get a grip on many challenges induced by IoT. However, we were only able to support Docker on Raspberry Pis so far... Imagine if Docker would run on more than just a few ARM boards! Armbian seems an awesome platform to extend the family of Docker compatible boards. So, I wonder if there is anyone who tried to run Docker on armbian? If you are now curious about this topic and wanna get started, please see this blog post of how to install Docker on ARM within no time: Looking forward to get in touch with you guys!
  9. Hi all. I've made a new video about how to build your own Armbian image with the Armbian build script. I also show how to set up virtualbox with a Ubuntu 18.04 image. Here's the video. Greetings, NicoD
  10. Hi all. I've made a new noob video on how to install Armbian on an SBC. I also show how I set up my Armbian desktop. And I show how to install Armbian onto another media. Greetings, NicoD
  11. How to install Puppeteer on node.js on Armbian. Tested on OrangePi Zero Plus running Ubuntu Xenial or Bionic. Should work on other boards and other builds. How to install the latest version of node.js. (at the time of writing was 12.7.0). Instructions for installing node.js on Debian and Ubuntu can be found at: The instructions at the time of writing were: # Using Ubuntu curl -sL | sudo -E bash - sudo apt-get install -y nodejs # Using Debian, as root curl -sL | bash - apt-get install -y nodejs Both of these methods work on Ubuntu. If you then try to install Puppeteer using "npm i puppeteer" you will discover that the version of Chrome that it installs locally is for the wrong CPU architecture. The solution to the problem is to install and use puppeteer-core instead of puppeteer. When using puppeteer core, you must define the path to Chrome or Chromium in the puppeteer script (see the test example below). First install a recent version of Chromium Browser. This will be used in headerless mode. apt-get install chromium-browser When the chromium-browser install is complete Create a folder for your Puppeteer project Let's assume that your folder is in /mnt/data/nodejs-scripts/screenshot (mine was on a mounted ntfs drive). cd /mnt/data/nodejs-scripts/screenshot npm init -y npm i puppeteer-core --save Now create a node.js test script Lets say that you call it screenshot.js Using your favorite editor insert the following lines into the file. const puppeteer = require('puppeteer-core'); (async ()=>{ const browser = await puppeteer.launch({ executablePath: '/usr/bin/chromium-browser', args: ['--no-sandbox'], headless: true }); const page = await browser.newPage(); await page.goto(''); await page.screenshot({path: 'screenshot.png'}); await browser.close(); })(); Make the script executable. chmod +x screenshot.js You can now run the script cd /mnt/data/nodejs-scripts/screenshot nodejs screenshot.js If it has worked, you will find a screenshot of the DuckDuckGo page in your project folder.
  12. Hi all. I've made a new video about x11vnc. With this you can control your Linux desktop from any other PC/SBC. It even works for videos and games. Only there's no sound. I use lightdm as display manager. If you use another display manager, change the line "After=lightdm.service" with your display manager. Here's my video, To Install sudo apt install x11vnc To create a password file x11vnc -storepasswd The service script : /lib/systemd/system/x11vnc.service [Unit] Description="x11vnc" Requires=display-manager.service After=lightdm.service [Service] ExecStart=/usr/bin/x11vnc -auth guess -loop -forever -safer -shared -ultrafilexfer -bg -o /var/log/x11vnc.log ExecStop=/usr/bin/killall x11vnc [Install] Enable the service script sudo systemctl daemon-reload sudo systemctl enable x11vnc sudo systemctl start x11vnc greetings. NicoD
  13. Hello dear experts at Armbian well the mysql_connect_error-script is a great help: It returns a string description of the last connect error ( see more infos here: ). The mysqli_connect_error() function returns the error description from the last connection error, if there is any error-note. the return value are the following ones: a. A string that describes the error. b. an empty string if no error occurred. at least this goes for the Version: PHP 5, PHP 7 well - if we run the code below we can get the info bout the option to connect to the db. What if we run this as a mysql-test-script, and what if we will want to convert it to use mysqli? Can this be done by changing mysql _query($sql); to mysqli _query($sql); ? <?PHP // the test-script that we are running. $DB["dbName"] = "emails"; $DB["host"] = "localhost"; $DB["user"] = "root"; $DB["pass"] = ""; $link = mysql_connect($DB['host'], $DB['user'], $DB['pass']) or die("<center>Howdy - be aware; There a thing happenede - An Internal Error has Occured. Please report following error to the webmaster shot him a mail now.<br><br>".mysql_error()."'</center>"); mysql_select_db($DB['dbName']); // end header connection part // function from a functions file that I run a mysql query through in any page. function executeQuery($sql) { $result = mysql_query($sql); if (mysql_error()) { $error = '<BR><center><font size="+1" face="arial" color="red">An Internal Error has Occured.<BR> The error has been recorded for review</font></center><br>'; if ($_SESSION['auto_id'] == 1) { $sql_formatted = highlight_string(stripslashes($sql), true); $error .= '<b>The MySQL Syntax Used</b><br>' . $sql_formatted . '<br><br><b>The MySQL Error Returned</b><br>' . mysql_error(); } die($error); } return $result; } // example query ran on anypage of the site using executeQuery function $sql='SELECT auto_id FROM friend_reg_user WHERE auto_id=' .$info['auto_id']; $result_member=executequery($sql); if($line_member=mysql_fetch_array($result_member)){ extract($line_member); } else { header("location: index.php"); exit; } ?> If we do replace mysql_* with mysqli_* then we will have to bear in mind that a whole load of mysqli_* functions need the database link to be passed. E.g.: the following ones. mysql_query($query) becomes mysqli_query($link, $query) I.e., lots of checking required. on the other hand side: is it suffice if we replace every mysql_* function call with its equivalent mysqli_*, when we will use the procedural API (note: there is some code based on the MySQL API, which is a procedural one - at least afaik), To help with that, the The MySQLi Extension Function Summary-manual is definitely something that will prove helpful. We can do the following: we have the following options to do that: - mysql_connect will be replaced by mysqli_connect - mysql_error will be replaced by mysqli_error and/or mysqli_connect_error, depending on the context - mysql_query will be replaced by mysqli_query ,,,, and so on and so forth. Note: For some functions, we may need to check the parameters very very carefully: Maybe there are some differences here and there -- but not that many differences. Belive me. Both mysql and mysqli-codes are based on the same library ( the great and powerful libmysql ; at least for PHP-version <= 5.2) Usage - for instance: with mysql, we have to use the mysql_select_db once connected, to indicate on which database we want to do our queries mysqli, on the other side, allows us to specify that database name as the fourth parameter to mysqli_connect.
  14. Hello All After a lot of hours and sleepless nights I was able to get this 5" LCD to work with the BPI-M64 module. 1. Correct resolution setup + environment. A. In /Boot/armbianEnv.txt set the following: Make sure to enter overlays= spi-add-cs1 spi-spidev (this is for the touch panel to work) B. for 180 rotation: extraargs=fbcon=rotate:2 drm_kms_helper.edid_firmware=HDMI-A-1:edid/800x480.bin video=HDMI-A-1:800x480-24@60 No rotation: extraargs= drm_kms_helper.edid_firmware=HDMI-A-1:edid/800x480.bin video=HDMI-A-1:800x480-24@60 C. this info came from: by the way if you dont want to see the console messages during boot you can add this to the armbianEnv.txt: console=serial D. Save and close. E. Create a directory where the .desktop file will be contained: sudo mkdir -p /etc/xdg/autostart F. Create the .desktop file and make it executable: Let's call this file custom-screen-resolution.desktop: sudo nano /etc/xdg/autostart/custom-screen-resolution.desktop The content of the file custom-screen-resolution.desktop should look as: [Desktop Entry] Name=Custom Screen Resolution Exec=sh -c 'xrandr --newmode "800x480_60.00" 29.50 800 824 896 992 480 483 493 500 -hsync +vsync; xrandr --addmode HDMI-1 800x480_60.00; xrandr --output HDMI-1 --mode 800x480_60.00' Terminal=false Type=Application Categories=Application G. reboot H. After O/S is loaded go to settings => display and you be able to select the 800x480 resolution. 2. With the Touch Panel I lost some hair on my head since there were many issues to overcome. A. I had to solder the LCD TP_IRQ Pin (22) to unused Pin (13) since Pin 22 on the BPI-M64 didnt support GPIO to IRQ... and diving into the sources took a lot of time to figure out why, so the easiest way is to change the Pin. (please have a look at the attached picture. B. Also there were wrong settings in the sun50i-a64-spi-add-cs1.dtbo overly, it seems that CS1 were going to the wrong Pin ( not as the BPI_M64 page shows, it should have been going to Pin 26 - PC2 but in the overlay it did go to Pin 35- PB6) I really dont know why so I had to change the DTS file to: /dts-v1/; /plugin/; / { compatible = "allwinner,sun50i-a64"; fragment@0 { target = <&pio>; __overlay__ { spi0_cs1: spi0_cs1 { pins = "PD0"; function = "gpio_out"; output-high; }; spi1_cs1: spi1_cs1 { pins = "PC2"; function = "gpio_out"; output-high; }; }; }; fragment@1 { target = <&spi0>; __overlay__ { pinctrl-names = "default", "default"; pinctrl-1 = <&spi0_cs1>; cs-gpios = <0>, <&pio 3 0 0>; /* PD0 */ }; }; fragment@2 { target = <&spi1>; __overlay__ { pinctrl-names = "default", "default"; pinctrl-1 = <&spi1_cs1>; cs-gpios = <0>, <&pio 2 2 0>; /* PC2 */ }; }; }; The sun50i-a64-spi-add-cs1.dts & the sun50i-a64-spi-add-cs1.dtbo are also attached. Just replace the sun50i-a64-spi-add-cs1.dtbo located at /boot/dtb/allwinner/overlay with file that I have attached here. C. The next settings I have found at post here I just copy and paste so you will have all the info in one page: D) Download ads7846? touch driver (compatible with xpt2046) mkdir ds7846 cd ds7846 wget mv ads7846.c?format=raw ads7846.c E) Create a makefile (Take note that it is TABS instead of spaces before the $(MAKE)) nano Makefile Insert the below in without the ----- -------------------------------- obj-m := ads7846.o KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: $(MAKE) -C $(KDIR) M=$(PWD) clean install: $(MAKE) -C $(KDIR) M=$(PWD) modules_install -------------------------------- F) Exit nano and run the following cd /usr/src/linux-headers-4.19.38-sunxi64 make scripts make modules_prepare sudo make sudo make install sudo depmod G) Download and compile and install ads7846_device cd .. git clone cd fbtft_tools/ads7846_device make sudo make install sudo depmod H) Load ads7846 and ads7846_device on boot sudo nano /etc/modules-load.d/ads7846.conf ads7846 ads7846_device I) Load ads7846_device options nano /etc/modprobe.d/ads7846_device.conf options ads7846_device model=7846 cs=1 gpio_pendown=234 keep_vref_on=1 swap_xy=0 pressure_max=255 x_plate_ohms=150 x_min=3900 x_max=200 y_min=3900 y_max=200 busnum=1 Note: GPIO_PENDOWN relate to the GPIO of the actual Pin number 13, With my board it is 234, If you are using other module (not BPI_M64) it could be other number, check with your module documents or do "gpio printall" in your board to see the correct Pin number. Since I use the screen in inverted mode those settings fits my needs. if you will use it in normal mode you might have to switch those parameters : swap_xy=0 or 1 x_min=3900 x_max=200 y_min=3900 y_max=200 or x_min=200 x_max=3900y_min=200 y_max=3900 I didnt really need it but you can install sudo apt-get install xinput-calibrator for fine tunning. (follow the instructions) I hope that I didnt forget anything. By the way the kernel I use is: 4.19.38-sunxi64 sun50i-a64-spi-add-cs1.dtbo sun50i-a64-spi-add-cs1.dts
  15. This weekend I was revising and testing the OV5640 for some A64 boards. To enable the Camera (OV5640) on NanoPi A64 for the mainline kernel you have to update the following: * DT * GPIO-I2C Here is the excerpt : Kernel config: CONFIG_I2C_GPIO=m CONFIG_VIDEO_OV5640=m CONFIG_VIDEO_SUN6I_CSI=m
  16. Hi all. I've done a lot of tests with different desktop environments on Armbian. I wanted an as light as possible desktop environment so I'd have enough ram left to do video rendering with the NanoPi M4(2GB) I had to try a lot of things to get things working fine. So I wanted to save others that hassle. Setting up Display Manager First we need a Display Manager. NODM is installed by default. I tried lightdm but couldn't get it to work. So I went for LXDM. With NODM installed I had problems, so I also removed NODM. To be sure lxdm is configured right, I also manually configure it. sudo apt install lxdm sudo apt remove nodm sudo dpkg-reconfigure lxdm Install LXDE Desktop Next step is to install the desktop environment you want. There is a problem with some Desktop Environments and LXDM what makes you can't login to some DE's out of the box. That we will resolve later. Easiest is to install lxdm first to be able to configure the others well. And reboot. sudo apt install lxde sudo reboot Once booted you should be greeted by the Login screen. Here you can choose your different Desktop Environment. Choose LXDE and login. If you'd try xfce4, then you'd see it doesn't work. To fix this we need to change the file /usr/share/xsessions/xfce.desktop. Use your favorite text editor. I use geany. sudo geany /usr/share/xsessions/xfce.desktop Somewhere at the top of the file you'll see "Name=Xfce Session". Replace that space with a hyphen to "Name=Xfce-Session" and save the file. Now you can also login to the default XFCE4 Desktop. With other desktops this can be the same. Go the the same directory and open the file with the desktop name that doesn't work. Again replace the space with a hyphen Installing different Desktop Environments. For the Mate desktop I also needed to install the applets, else I got errors at login because of these missing applets sudo apt install mate-desktop-environment mate-applets For KDE-Plasma sudo apt install kde-full For Gnome. Modify the file sudo geany /usr/share/xsessions/gnome... sudo apt install gnome-session sudo update-alternatives --config gdm3.css I also tried LXQT. But this one didn't work. You can try others too. Remove Desktop Environment To remove a desktop environment you don't want anymore you do the remove instead of install. sudo apt remove kde-full sudo apt remove mate-desktop-environment . . . Please let me know if there's mistakes made, or if you've got advice. Source for changing the name to make them work @IgorS : Greetings, NicoD
  17. I need a suggestion for a samba server (guess that is what it is called). I have an 8 TB external powered HD, and need a device that I can attach it to, so I can "see" it on the network. I had it attached to the USB 3 port on my Asus router, but it had issues, because the router did not support the 8 TB HD. I now have it connected to one of my microPCs (Tronsmart Ara X5) USB 3 ports, but I am only gettting a max of 12 MBs speed. I would like an inexpensive board that will support that drive and is easy to set up as a samba server..... thanks.
  18. Full root filesystem encryption on an Armbian/Orange Pi PC 2 system MMGen ( This tutorial provides detailed, step-by-step instructions for setting up full root filesystem encryption on an Armbian/Orange Pi PC2 system. With minor changes, it can be adapted to other Armbian-supported boards. The disk is unlocked remotely via ssh, permitting unattended bootup. Requirements: Linux host system One Orange Pi PC 2 Two blank Micro-SD cards (or a working Armbian system for your board + one blank SD card) USB Micro-SD card reader Ability to edit text files and do simple administrative tasks on the Linux command line Part 1 - Get, unpack and copy the latest Armbian image for the Orange Pi PC 2 $ mkdir ~/opi-build; cd ~/opi-build # For a server image: $ curl -L -O # For a desktop image: $ curl -L -O # Consult the download directory for changes, as well as torrent files: $ Unpack (if the 7zr command is missing on your system, first install the 'p7zip' package): $ 7zr x Ubuntu_*.7z Check the PGP signature and integrity of the image (optional): $ gpg --keyserver --recv-key 9F0E78D5 $ gpg --verify *.img.asc Or, alternatively, just check its integrity with a checksum: $ sha256sum -c sha256sum.sha Now you're ready to copy Armbian to the SD card or cards. If you have two blank cards, the first will hold an ordinary unencrypted Armbian system used for the setup process, while the second will hold the target encrypted system. Alternatively, if you already have a working Armbian system for your board, you can use it for the setup process. In that case, your one blank SD card will be considered the “second” card, and you can ignore all instructions hereafter pertaining to the first card. Note that for the remainder of this section, the first SD card will be referred to as '/dev/sdX' and the second as '/dev/sdY'. You'll replace these with the SD cards' true device filenames. The device names can be discovered using the command 'dmesg' or 'lsblk'. If you remove the first card before inserting the second, it's possible (but not guaranteed) that the cards will have the same device name. Insert the first blank SD card and copy the image to it: $ sudo dd if=$(echo *.img) of=/dev/sdX bs=4M After the command exits, you may remove the first card. Now insert the second SD card, which will hold a small unencrypted boot partition plus your encrypted Armbian system. Copy the image's boot loader to it: $ sudo dd if=$(echo *.img) of=/dev/sdY bs=512 count=4096 Now partition the card: $ sudo fdisk /dev/sdY Within fdisk, create a new DOS disklabel with the 'o' command. Use the 'n' command to create a primary partition of size +100M beginning at sector 4096. Type 'p' to view the partition table. Note the end sector. Now create a second primary partition beginning one sector after the first partition's end sector and filling the remainder of the card. When you're finished, your partition table will look something like this: Device Boot Start End Sectors Size Id Type /dev/sdY1 4096 208895 204800 100M 83 Linux /dev/sdY2 208896 31422463 31213568 14.9G 83 Linux Double-check that the second partition begins one sector after the end of the first one. If you mess something up, use 'd' to delete partitions or 'q' to exit fdisk and try again. Once everything looks correct, type 'w' to write the partition table. Now you'll begin the process of copying the system to the second card. First you'll associate the image file with a loop device and mount the device: $ losetup -f # displays the name of the loop device; remember this $ sudo losetup -Pf *.img # associate image file with the above loop device $ mkdir mnt boot root $ sudo mount /dev/loopXp1 mnt # replace '/dev/loopX' with the above loop device Create a filesystem on the SD card's boot partition and copy the boot partition data from the image file to it: $ sudo mkfs.ext4 /dev/sdY1 $ sudo e2label /dev/sdY1 OPI_PC2_BOOT # don't omit this step! $ sudo mount /dev/sdY1 boot $ sudo cp -av mnt/boot/* boot $ (cd boot; sudo ln -s . boot) Create the encrypted root partition (for this the 'cryptsetup' package must be installed on the host). You'll be prompted for a passphrase. It's recommended to choose an easy one like 'abc' for now. The passphrase can easily be changed later (consult the 'cryptsetup' man page for details): $ sudo cryptsetup luksFormat /dev/sdY2 Activate the encrypted root partition, create a filesystem on it and mount it: $ sudo cryptsetup luksOpen /dev/sdY2 foo # enter your passphrase from above $ sudo mkfs.ext4 /dev/mapper/foo $ sudo mount /dev/mapper/foo root Copy the system to the encrypted root partition: $ (cd mnt && sudo rsync -av --exclude=boot * ../root) $ sync # be patient, this could take a while $ sudo mkdir root/boot $ sudo touch root/root/.no_rootfs_resize Unmount the mounted image and second SD card, and free the loop device and encrypted mapping: $ sudo umount mnt boot root $ sudo losetup -d /dev/loopX $ sudo cryptsetup luksClose foo From here on, all your work will be done on the Orange Pi. Part 2 - boot into the unencrypted Armbian system If applicable, insert the first (unencrypted) SD card into the Pi's Micro-SD card slot. Insert a USB card reader holding the second SD card into a USB port on the Pi. Boot the Pi. If applicable, log in as root with password '1234', follow the password update instructions, and stay logged in as root. The following steps will be performed from a root shell. Part 3 - set up the unencrypted Armbian system Update the APT package index and install cryptsetup: # apt-get update # apt-get install cryptsetup Part 4 - set up the encrypted Armbian system Prepare the encrypted system chroot: # BOOT_PART=($(lsblk -l -o NAME,LABEL | grep OPI_PC2_BOOT)) # ROOT_PART=${BOOT_PART%1}2 # cryptsetup luksOpen /dev/$ROOT_PART foo # mkdir /mnt/enc_root # mount /dev/mapper/foo /mnt/enc_root # mount /dev/$BOOT_PART /mnt/enc_root/boot # cd /mnt/enc_root # mount -o rbind /dev dev # mount -t proc proc proc # mount -t sysfs sys sys Copy some key files so you'll have a working Internet connection within the chroot: # cat /etc/resolv.conf > etc/resolv.conf # cat /etc/hosts > etc/hosts Now chroot into the encrypted system. From this point on, all work will be done inside the chroot: # chroot . # apt-get update # echo 'export CRYPTSETUP=y' > /etc/initramfs-tools/conf.d/cryptsetup # apt-get install cryptsetup dropbear-initramfs Check to see that the cryptsetup scripts are present in the initramfs (command should produce output): # gunzip -c /boot/initrd.img* | cpio --quiet -t | grep cryptsetup Edit '/etc/fstab' to look exactly like this: /dev/mapper/rootfs / ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1 /dev/mmcblk0p1 /boot ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 2 tmpfs /tmp tmpfs defaults,nosuid 0 0 Add the following lines to '/etc/initramfs-tools/initramfs.conf'. If the Orange Pi's IP address will be statically configured, substitute the correct static IP address after 'IP='. If it will be configured via DHCP, omit the IP line entirely: DEVICE=eth0 IP= Add the following parameters to the quoted bootargs line in '/boot/boot.cmd'. Note that the 'root' parameter replaces the existing one: root=/dev/mapper/rootfs cryptopts=source=/dev/mmcblk0p2,target=rootfs If you want to be able to unlock the disk from the virtual console (which you probably do) as well as via ssh, then comment out the following line: # if test "${console}" = "serial" || test "${console}" = "both"; then setenv consoleargs "${consoleargs} console=ttyS0,115200"; fi In case you're wondering, 'setenv console "display"' doesn't work. Don't ask me why. Compile the boot menu: # mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr Copy the SSH public key from the machine you'll be unlocking the disk from to the Armbian machine: # rsync yourusername@remote_machine:.ssh/id_*.pub /etc/dropbear-initramfs/authorized_keys If you'll be unlocking the disk from more than one host, then edit the authorized_keys file by hand and add the additional SSH public keys. Edit '/etc/dropbear-initramfs/config', adding the following lines: DROPBEAR_OPTIONS="-p 2222" DROPBEAR=y Reconfigure dropbear: # dpkg-reconfigure dropbear-initramfs Make sure everything was included in the initramfs (both commands should produce output): # gunzip -c /boot/initrd.img* | cpio --quiet -t | grep dropbear # gunzip -c /boot/initrd.img* | cpio --quiet -t | grep authorized_keys Your work is finished! Exit the chroot and shut down the Orange Pi: # exit # halt -p Swap the SD cards and restart the Pi. Unlock the disk by executing the following command on your remote machine. Substitute the Pi's correct static or DHCP-configured IP address for the one below. If necessary, also substitute the correct disk password in place of 'abc': $ ssh -p 2222 -x root@ 'echo -n abc > /lib/cryptsetup/passfifo' If you choose to unlock the disk from the tty, just enter your disk password and hit ENTER. If all went well, your root-filesystem encrypted Armbian system is now up and running!
  19. Mini tutorial I am putting here some notes for posterity In the current version of armbian (testing H6) I use X11 / Xorg only reaches 1024x768, but my display reaches 1440x900. To add this new resolution to the list of Settings/Display you have to give these commands: # xrandr --listmonitors (this command serves to see what it's called, the hdmi output) # cvt 1440 900 (output: # 1440x900 59.89 Hz (CVT 1.30MA) hsync: 55.93 kHz; pclk: 106.50 MHz Modeline "1440x900_60.00" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync ) # xrandr --newmode "1440x900_60.00" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync # xrandr --addmode HDMI-1 1440x900_60.00 # xrandr --output HDMI-1 --mode 1440x900_60.00 If it works then modify Xorg with: # sudo mcedit /etc/X11/xorg.conf.d/40-monitor.conf Section "Monitor" Identifier "HDMI-1" Modeline "1440x900_60.00" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync Option "PreferredMode" "1440x900" EndSection # reboot
  20. hello dear all, I've been using the lm-sensors tool for years now - first time in Ubuntu and now i want to use it in Manjaro - my actually fav system LM-Sensors - it does a lot: It monitors CPU temperature, the fan speeds, and - additionally - also the motherboard voltages that could be measured. After using it for some time in Ubuntu - my previous fav-linux.i now want to use some advanced uses of lm-sensors - i have heard that we can use it in combination with some graphical interfaces to interact with it. first i have to do the Installation: step one: Install lm-sensors, then run it with no options to see what it does: $ sensors coretemp-isa-0000 Adapter: ISA adapter Physical id 0: +47.0°C (high = +90.0°C, crit = +120.0°C) Core 0: +45.0°C (high = +90.0°C, crit = +120.0°C) Core 1: +47.0°C (high = +90.0°C, crit = +120.0°C) Core 2: +44.0°C (high = +90.0°C, crit = +120.0°C) Core 3: +46.0°C (high = +90.0°C, crit = +120.0°C) This is on an Ubuntu PC. My Manjaro system installs it a bit different i think - and afterwards i have to take care for the configuration, on older systems - (note 10 years ago i used Ubuntu) i have followed another setup: then i go ahead: Run sensors-detect to set it up to detect the sensors and the temp of the CPU. in the past i have learned that the safest method and way to do a setup and basic configuration of lm-sensors is to accept all of the defaults by: $ sudo sensors-detect # sensors-detect revision xyz (2019-01-30 12:00:33 +0200) and.... after getting the first scan - we can the setup in modify /etc/modules: but how to go ahead now.... how to combine it the get the advanced features - and graphical output!?
  21. I made a hardware setup guide for the Pine64 Clusterboard. It's over on their forums: Long and short is that it's a $99 motherboard that can accommodate 7x $30 compute modules.
  22. Is OPI ONE a toy or a toy ? Yes and yes and a fun one too ! The following experiment shows the OPI ONE in use as a Virtual Desktop Server AND Virtual Desktop Client. Setup as Virtual Desktop Server ( remotely access headless OPI ONE desktop ) OPI ONE : install xrdp and tightvncserver <clients> : install and configure remote desktop ( rdesktop on linux, aRDP on android - not yet tested on OS-X or WIN ) Setup as Virtual Desktop Client ( OPI ONE securely accesses a remote linux desktop ) OPI ONE : install x2goclient <server> : install x2goserver on linux server ( physical or virtual ) of choice This document explains the experiment ( you have to click/enlarge pictures in your browser .. sorry ) And here is a screenshot of the actual session : Red : Linux server desktop connecting to OPI ONE via rdesktop / xrdp Orange : OPI ONE desktop connecting to UK virtual server via x2goclient/x2goserver Purple : virtual server (UK) desktop running libreoffice White : actual document being edited ( incl. drawings ! ) in window ( Headline : Italian guy in Switzerland abuses OPI ONE to edit nerd stuff in the UK ) Remote desktop access from smartphone ( cheap Wiko Lenny 2 ) for touch-fumbling nano-fingers Remote desktop access from tablet ( Galaxy Note 8.0 ) using pen There are numerous use cases covered with the simple techniques employed.Thanks to the Armbian team and the forum buddies for their excellent job in making OPI ONE usable. Have fun !
  23. It's *amazing* what you can find reading the Armbian documentation! I dig the shell, even old-school in a virtual terminal or minimal server type setup. Normally that means going through some squinty-eyed hoops to get the Terminus console font installed with larger sizes in the first place on large monitors. Wait - what's this? sudo dpkg-reconfigure console-setup I did this in a virtual terminal, and allowed setup to pick the right character set for me. Then I blasted the framebuffer with the largest Terminus font size allowed. Perfection! Not a big deal to most, but having this be part of the standard distribution image made my day. Soooo easy. thanks!
  24. You may have seen discussions around the forum regarding work being done by @adafruit using circuit python with Armbian, but I wanted to make sure this nice write-up had proper visibility.
  25. Orange Pi Zero NTP Stratum 1 PPS GPS Server with Armbian OS. Link to the Tutorial - This tutorial uses a 3.3V capable GPS module with PPS output - TOPGNSS GN-701 (u-blox 7) but other similar modules should work. This tutorial is for the Orange Pi Zero, but will probably work for other boards. I couldn't easily do a comprehensive hardware and software tutorial on this forum, so I've published it on my web server and linked from here and attached a PDF. Link to the Tutorial - Tutorial PDF ntp-stratum1.pdf If you spot any typo's or errors please let me know.