diff --git a/Documentation/applications/system/vncviewer/index.rst b/Documentation/applications/system/vncviewer/index.rst new file mode 100644 index 0000000000000..fb8836d8a7684 --- /dev/null +++ b/Documentation/applications/system/vncviewer/index.rst @@ -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] [port] + +Options: + +- ``-p `` — VNC password +- ``-d `` — 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 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 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 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 diff --git a/Documentation/applications/system/vncviewer/vncviewer_xvfb.png b/Documentation/applications/system/vncviewer/vncviewer_xvfb.png new file mode 100644 index 0000000000000..792a45cca7794 Binary files /dev/null and b/Documentation/applications/system/vncviewer/vncviewer_xvfb.png differ diff --git a/Documentation/applications/system/vncviewer/vncviewer_xvfb_lcd.jpg b/Documentation/applications/system/vncviewer/vncviewer_xvfb_lcd.jpg new file mode 100644 index 0000000000000..1a949e2e8c279 Binary files /dev/null and b/Documentation/applications/system/vncviewer/vncviewer_xvfb_lcd.jpg differ diff --git a/boards/xtensa/esp32s3/lckfb-szpi-esp32s3/configs/vncviewer/defconfig b/boards/xtensa/esp32s3/lckfb-szpi-esp32s3/configs/vncviewer/defconfig new file mode 100644 index 0000000000000..3371ee8920bc1 --- /dev/null +++ b/boards/xtensa/esp32s3/lckfb-szpi-esp32s3/configs/vncviewer/defconfig @@ -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