Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 128 additions & 0 deletions Documentation/applications/system/vncviewer/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
===========================
``vncviewer`` VNC Viewer
===========================

A lightweight VNC viewer that renders a remote desktop on an LCD display via
the NuttX LCD character device interface (``/dev/lcd0``).

Features:

- RFB 3.8 protocol with VNC Authentication (pure software DES, no external library)
- Auto-detect pixel format from LCD driver
- Raw encoding with row-by-row rendering — minimal RAM usage
- Automatic reconnection on disconnect

Prepare
==========================

- Enable the VNC Viewer application (Device):

.. code-block:: bash

CONFIG_NET_TCP=y
CONFIG_LCD=y
CONFIG_SYSTEM_VNCVIEWER=y

- Ensure the device has a working LCD driver (``/dev/lcd0``) and TCP/IP network connectivity.

- Install a VNC server on the host. For example, on Ubuntu:

.. code-block:: bash

sudo apt install x11vnc xvfb openbox xterm

Usage
==========================

.. code-block:: bash

vncviewer [options] <host> [port]

Options:

- ``-p <password>`` — VNC password
- ``-d <devno>`` — LCD device number (default: 0)
- ``-h`` — Show help

Default port: 5900

Host VNC Server Configuration
==============================

Three server modes are supported:

1. Xvfb Virtual Desktop (Pixel-Perfect 1:1)
---------------------------------------------

Create a virtual framebuffer matching the LCD resolution (e.g., 320×240):

.. code-block:: bash

# Start virtual display
Xvfb :1 -screen 0 320x240x16 &
DISPLAY=:1 openbox &
DISPLAY=:1 xterm -geometry 38x11+0+0 -fa Monospace -fs 10 &

# Start VNC server
x11vnc -display :1 -rfbport 5901 -passwd mypasswd -shared -forever -xkb -add_keysyms -bg

On the device:

.. code-block:: bash

vncviewer -p mypasswd <host_ip> 5901

.. figure:: vncviewer_xvfb.png
:align: center

Xvfb virtual desktop — host side (320×240 xterm in VNC viewer)

.. figure:: vncviewer_xvfb_lcd.jpg
:align: center

Xvfb virtual desktop — device side (rendered on ST7789 LCD)

2. Physical Desktop Clip (Top-Left Region)
-------------------------------------------

Clip a region of the physical desktop matching the LCD resolution:

.. code-block:: bash

x11vnc -display :0 -rfbport 5901 -passwd mypasswd -shared -forever -xkb -add_keysyms -bg -clip 320x240+0+0

On the device:

.. code-block:: bash

vncviewer -p mypasswd <host_ip> 5901

3. Physical Desktop Scaled
-------------------------------------------

Scale the full desktop down to the LCD resolution:

.. code-block:: bash

x11vnc -display :0 -rfbport 5901 -passwd mypasswd -shared -forever -xkb -add_keysyms -bg -scale 320x240

On the device:

.. code-block:: bash

vncviewer -p mypasswd <host_ip> 5901

Examples
==========================

Connect to a VNC server with password:

.. code-block:: bash

vncviewer -p mypasswd 192.168.1.100 5901

Connect using a different LCD device:

.. code-block:: bash

vncviewer -d 1 -p mypasswd 192.168.1.100 5900
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
111 changes: 111 additions & 0 deletions boards/xtensa/esp32s3/lckfb-szpi-esp32s3/configs/vncviewer/defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
# CONFIG_ARCH_LEDS is not set
# CONFIG_NSH_ARGCAT is not set
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
CONFIG_ALLOW_BSD_COMPONENTS=y
CONFIG_ARCH="xtensa"
CONFIG_ARCH_BOARD="lckfb-szpi-esp32s3"
CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_ESP32S3_LCKFB_SZPI=y
CONFIG_ARCH_CHIP="esp32s3"
CONFIG_ARCH_CHIP_ESP32S3=y
CONFIG_ARCH_CHIP_ESP32S3WROOM1N16R8=y
CONFIG_ARCH_INTERRUPTSTACK=2048
CONFIG_ARCH_IRQ_TO_NDX=y
CONFIG_ARCH_MINIMAL_VECTORTABLE_DYNAMIC=y
CONFIG_ARCH_NUSER_INTERRUPTS=2
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_XTENSA=y
CONFIG_BOARD_LOOPSPERMSEC=16717
CONFIG_BUILTIN=y
CONFIG_DEBUG_FEATURES=y
CONFIG_DEBUG_FULLOPT=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DEV_GPIO=y
CONFIG_DRIVERS_IEEE80211=y
CONFIG_DRIVERS_VIDEO=y
CONFIG_DRIVERS_WIRELESS=y
CONFIG_ESP32S3_GPIO_IRQ=y
CONFIG_ESP32S3_I2C0=y
CONFIG_ESP32S3_SPI2=y
CONFIG_ESP32S3_SPI2_CLKPIN=41
CONFIG_ESP32S3_SPI2_CSPIN=-1
CONFIG_ESP32S3_SPI2_MISOPIN=-1
CONFIG_ESP32S3_SPI2_MOSIPIN=40
CONFIG_ESP32S3_SPIFLASH=y
CONFIG_ESP32S3_SPIFLASH_SPIFFS=y
CONFIG_ESP32S3_SPI_SWCS=y
CONFIG_ESP32S3_SPI_UDCS=y
CONFIG_ESP32S3_UART0=y
CONFIG_ESPRESSIF_LEDC=y
CONFIG_ESPRESSIF_LEDC_CHANNEL0_PIN=42
CONFIG_ESPRESSIF_LEDC_TIMER0=y
CONFIG_ESPRESSIF_WIFI=y
CONFIG_FS_PROCFS=y
CONFIG_GPIO_LOWER_HALF=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=3072
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=3072
CONFIG_INTELHEX_BINARY=y
CONFIG_IOB_BUFSIZE=400
CONFIG_IOB_NBUFFERS=100
CONFIG_IOB_NCHAINS=32
CONFIG_IOB_THROTTLE=40
CONFIG_IOEXPANDER=y
CONFIG_IOEXPANDER_NPINS=8
CONFIG_IOEXPANDER_PCA9557=y
CONFIG_LCD=y
CONFIG_LCD_DEV=y
CONFIG_LCD_FRAMEBUFFER=y
CONFIG_LCD_ST7789=y
CONFIG_LCD_ST7789_DATA_ENDIAN_LITTLE=y
CONFIG_LCD_ST7789_FREQUENCY=40000000
CONFIG_LINE_MAX=64
CONFIG_NETDB_DNSCLIENT=y
CONFIG_NETDEV_LATEINIT=y
CONFIG_NETDEV_PHY_IOCTL=y
CONFIG_NETDEV_WIRELESS_IOCTL=y
CONFIG_NET_ETH_PKTSIZE=1514
CONFIG_NET_ICMP_SOCKET=y
CONFIG_NET_TCP=y
CONFIG_NET_TCP_DELAYED_ACK=y
CONFIG_NET_TCP_WRITE_BUFFERS=y
CONFIG_NET_UDP=y
CONFIG_NET_UDP_WRITE_BUFFERS=y
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_READLINE=y
CONFIG_PREALLOC_TIMERS=4
CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_RAM_SIZE=114688
CONFIG_RAM_START=0x20000000
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SPI_CMDDATA=y
CONFIG_START_DAY=6
CONFIG_START_MONTH=12
CONFIG_START_YEAR=2011
CONFIG_SYSLOG_BUFFER=y
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_SYSTEM_VNCVIEWER=y
CONFIG_TIMER=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_VIDEO=y
CONFIG_VIDEO_FB=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y
CONFIG_WIRELESS_WAPI_CMDTOOL=y
CONFIG_WIRELESS_WAPI_STACKSIZE=4096
Loading