Raspberry Pi: Remote GUI access to a Linux computer using Tightvnc

本文介绍如何在Raspberry Pi上配置TightVNC,实现远程访问其图形界面。通过安装TightVNC服务器软件,并设置开机启动,用户可以从其他计算机连接到Raspberry Pi。此外,还介绍了如何通过SSH隧道提高安全性。

Description

The command line is a great way to manage a remote Linux computer if you don’t mind typing in commands, but sometimes you need to be able to view a GUI. Short of a very long cable one of the best ways of doing this is using the VNC protocol (Virtual Network Computing).

The following are instructions on how to configure this on the Raspberry Pi (Debian based distribution). It should be similar for any other Debian based distribution (eg. Ubuntu). Some other distributions use different software install tools and possibly different init setup tools.

If this is used in combination with the guide to running the Raspberry Pi headless with Debian Linux then it can be used to setup a Raspberry Pi for remote access without ever needing to connect it to a monitor.


Choosing TightVNC

There are several software projects that support VNC. I have chosen to use TightVNC because it is free open source software (GPL2), provides compression to allow it to work over a slow network (Internet) and is readily available in the software repositories.


Client server model

VNC follows the traditional client sever model. The server software runs on the host to be accessed, and client software runs on the local machine that wishes to control the host. The server and client do not have to be the same (eg. the client can be RealVNC when the server is TightVNC), but some features may only work when the same client and server are used.


Install the TightVNC server software

First refresh the software repository information using

sudo apt-get update

This is particularly important if you have just installed the operating system as the repository information may be incomplete.

Install the server software from the repositories:

sudo apt-get install tightvncserver

Start server and configure a password

The first time you run the server it will prompt you to set a password. This is the password that you use when connecting remotely.

/usr/bin/tightvncserver

There is no need to create a view only password, unless you have a specific need.

When the server starts it will tell you which virtual desktop has been setup. In this case:

New 'X' desktop is raspberrypi:1

says that it’s virtual desktop 1. You would connect to this using :1 at the end of the IP address in the client, this is the one we will setup to start automatically later.

You can run multiple instances. Each time you start tightvncserver it will use the next available desktop, but in most cases you will just need one.


Adding Tightvnc to the startup

To have Tightvnc startup automatically we need to create a new init file.
below is the code we will be adding, but to make it a little easier you can download the file from this webserver.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          tightvncserver
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop tightvncserver
### END INIT INFO

# More details see:
# http://www.penguintutor.com/linux/tightvnc

### Customize this entry
# Set the USER variable to the name of the user to start tightvncserver under
export USER='pi'
### End customization required

eval cd ~$USER

case "$1" in
  start)
    su $USER -c '/usr/bin/tightvncserver :1'
    echo "Starting TightVNC server for $USER "
    ;;
  stop)
    pkill Xtightvnc
    echo "Tightvncserver stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/tightvncserver {start|stop}"
    exit 1
    ;;
esac
exit 0

To download use the following commands:

wget http://www.penguintutor.com/otherfiles/tightvncserver-init.txt

sudo mv tightvncserver-init.txt /etc/init.d/tightvncserver

You may need to change the variable on line 16. It is currently set to pi which is the default username on the Raspberry Pi Debian image. Set this to whatever username you want to login to TightVNC as. Do not put root as the user.

Change the file so it is owned by root (not strictly neccessary, but is the standard ownership for init files

sudo chown root:root /etc/init.d/tightvncserver

Make the file executable by running

sudo chmod 755 /etc/init.d/tightvncserver

Add the script to the default runlevels with the command

sudo update-rc.d tightvncserver defaults

TightVNC will now start at startup. I’d recommend you reboot at this point to make sure it’s working, but you can just stop and start if you don’t want to reboot.
You can manually start and stop it using

sudo /etc/init.d/tightvncserver start

and

sudo /etc/init.d/tightvncserver stop

Note that this is designed for running only one instance of TightVNC on the computer. If you want to be able to start and stop specific instances of TightVNC then you will need to tweak the startup script appropriately.


Installing Tightvnc viewer (VNC client) on a Linux computer

On a Linux computer you can install the viewer with

sudo apt-get install xtightvncviewer 

or if that is not in the repositories try:

sudo apt-get install ssvnc 

This will work with Debian / Ubuntu based distributions only, for other distributions use the normal package manager.

Note that ssvnc - which is the version I installed on my Kubuntu computer is based on tightvnc, but also has the ability to configure the ssh tunnelling (see later) through the GUI.

Login using

xtightvncviewer 192.168.1.6:1

(replace with your own IP address as appropriate)

TightVNC viewer running on Linux connected to a Raspberry Pi


Installing Tightvnc view on a Windows computer

To access from Windows or using the Java Client download from TightVNC.com


Securing TightVNC

TightVNC allows anyone that knows the password to login as the user that it’s running under. It also does this without encryption so anyone can snoop in on the session. Fortunately there is a secure solution, which is to tunnel the connection over an ssh (secure shell) login.

First step is to restrict Tightvnc to the local computer only. This is done by adding the option -localhost when starting the tightvncserver. To do this edit line 23 in the /etc/init.d/tightvncserver file to read:

su $USER -c '/usr/bin/tightvncserver -localhost :1'

Then restart the server.

To login using ssh - first login to the host computer using ssh

ssh pi@192.168.1.6 -L 5901:localhost:5901

The -L option creates the tunnel, from the current computer (default) port 5901 to the host computer (as localhost) port 5901. Port 5901 is the default port for display 1, 5902 for display 2 etc.

To connect using tightvnc now use the command

xtightvncviewer 127.0.0.1:1

Note that your previous terminal will now be logged into the Raspberry Pi so you will need to start a new terminal or tab to run the viewer.

If using Windows then the ssh tunnel can be created from within PuTTY

PuTTY providing a ssh tunnel for vnc from Windows to Linux

Then connect using the vnc client using 127.0.0.1:1.

You can now use the GUI to run applications on the Raspberry Pi without needing a monitor or keyboard. If you have port forwarding set on your router you can do this over the Internet.


Starting your window manager

The instructions above are sufficient for the Raspberry Pi running Debian. You may however need to make a further configuration change to start your normal window manager / application launcher. If you get a blank screen when connecting edit the file ~/.vnc/xstartup and replace the line /etc/X11/Xsession with one of the following as appropriate.

exec ck-launch-session startlxde    #for an lxde session
exec ck-launch-session gnome-session    #for a gnome-session
exec ck-launch-session openbox-session  #for an openbox desktop
exec ck-launch-session startxfce4   #for an xfce desktop
exec ck-launch-session icewm    #for an icewm desktop
exec ck-launch-session startkde #for a kde desktop

For instance with Ubuntu you would use the entry for gnome, for xubuntu you would use xfce and for kubuntu use kde. The Raspberry Pi uses lxde, but this is started automatically on the Raspberry Pi there is no need to add it to the xstartup file.


Reference

From: http://www.penguintutor.com/linux/tightvnc

内容概要:本文系统阐述了智能物流路径规划的技术体系与实践应用,涵盖其发展背景、核心问题建模、关键算法、多目标与动态环境处理、系统架构及典型应用场景。文章以车辆路径问题(VRP)及其变体为核心数学模型,介绍了从Dijkstra、A*等单智能体算法到多车VRP的元启发式求解方法(如遗传算法、蚁群算法、大规模邻域搜索),并深入探讨了多目标优化(成本、时间、碳排放)与动态环境(实时订单、交通变化)下的自适应规划策略。结合城市配送、干线运输、场内物流等案例,展示了路径规划在提升效率、降低成本方面的实际价值,并分析了当前面临的复杂性、不确定性等挑战,展望了AI融合、数字孪生、车路协同等未来趋势。; 适合人群:具备一定物流、运筹学或计算机基础,从事智能交通、物流调度、算法研发等相关工作的技术人员与管理人员,工作年限1-5年为宜。; 使用场景及目标:①理解智能物流路径规划的整体技术架构与核心算法原理;②掌握VRP建模方法与多目标、动态环境下路径优化的实现策略;③为物流系统设计、算法选型与系统优化提供理论依据与实践参考; 阅读建议:建议结合文中案例与数学模型,重点理解算法选择与实际业务场景的匹配逻辑,关注动态规划与多目标优化的工程实现难点,可配合仿真工具或开源求解器进行实践验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值