Cubieboard/SBC远端操作方法

* 串行接口
* SSH
* SSH + X11
* XDMCP
* X协议

串行接口/UART/RS232

如果没有网络,在U-boot序列中,或由于其他原因。通过(将<代码>x替换为相应的数字)连接。
*控制计算机和受控板(这里是CubieBoard)之间的串行电缆并使用/dev/ttySx端口。
*一个标准的USB<=>串行电缆/适配器(如PL2303,CH340,FT2232C…兼容),并使用/dev/ttyUSBx端口。

一些可用的命令(在终端),以串行连接。例子中的参数是用USB-串行电缆(/dev/ttyUSB0),对于串行电缆,用/dev/ttyS0代替(或者用1代替第二个,等等)。

软件包              命令                                                 (退出)
busybox             busybox microcom -t 5000 -s 115200 /dev/ttyUSB0      (ctrl+x)
minicom             minicom -D /dev/ttyUSB0 -b 115200                    (ctrl+a,然后x)
gtkterm-git (AUR)   gtkterm -s 115200 -p /dev/ttyUSB0                    (ctrl+shift+q)
python-pyserial     python -m serial.tools.miniterm /dev/ttyUSB0 115200  (ctrl+])
screen              screen /dev/ttyUSB0 115200                           (ctrl+a,然后\)
tinyserial          com /dev/ttyUSB0 115200                              (ctrl+a)
picocom             picocom --baud 115200 /dev/ttyUSB0                   (ctrl+a,然后ctrl+x)

Il est possible de changer les paramètre d’un ttyS/ttyUSB à l’aide de la commande stty (voir man stty)

stty -F /dev/ttyUSB0 cs8

以下命令有一个图形界面,这里是软件包名称Arch Linux (AUR)
* gtkterm-git (AUR)
* easyterm (AUR)

SSH

ssh 用户@cubieboard

通过SSH隧道的SSH + X应用程序显示

首先,你需要检查是否允许通过SSH进行X11传输。要做到这一点,你需要检查在/etc/ssh/sshd_config,有X11Forward(X11转发)

X11Forward yes

如果不是这种情况,那么在修改后必须重新启动SSH服务,然后:

ssh -X 用户@cubieboard

如果出现这个错误

Xlib:  extension "RANDR" missing on display "localhost:10.0".

断开连接,再试一次,用:

ssh -Y 用户@cubieboard

如果出现这个错误

X11 forwarding request failed on channel 0

确保xorg-xauth包在远程服务器上是bin安装。

sudo pacman -S xorg-xauth

Avec cette méthode, concernant les applications 3D :
* Si OpenGL ou OpenGL ES purement logiciel, cela passera (mais lentement).
* Si OpenGL ES accéléré, ça ne marche pas.
Une solution de contournement, utliser LLVMpipe (la plus rapide des implémentations logicielles), Il y aura OpenGL complet mais dont le rendu ne sera fait que par le CPU/SIMD :

LIBGL_ALWAYS_SOFTWARE=1 $application

还可以用

export LIBGL_ALWAYS_SOFTWARE=1
$application

XDMCP

Avec cette méthode à propos des applications 3D :
* OpenGL logiciel ou OpenGL ES (logiciel ou avec accélération matérielle), ne fonctionne pas du tout, du moins en cas de mélange x86 <-> ARM. Il est toujours possible d’utiliser LLVMpipe

Attention XDMCP va écouter sur le port 177 en TCP, penser à le protéger sur un poste nomade ou qui n’est pas derrière un parre-feu

Vous pouvez le protéger comme suit (il faut être root ou le faire en sudo), si vous n’avez pas encore de règle. On définit d’abord l’adresse IP du seul host à autoriser dans la variable HOST_A_AUTORISER (j’ai donné 192.168.0.2 pour l’exemple, il faut le remplacer). Il peut être nécessaire d’autoriser la sortie si vous avec un DROP par défaut (ce que je conseillerais plutôt)

HOST_A_AUTORISER=192.168.0.2
iptables -I INPUT -p tcp --dport 177 -m comment --comment "interdit tout XDMCP" -j DROP
iptables -I INPUT -p tcp --dport 177 -s ${HOST_A_AUTORISER} -m comment --comment "autorise host toto XDMCP" -j ACCEPT

Sur la Cubieboard, ajouter dans /etc/lightdm/lightdm.conf

[XDMCPServer]
enabled=true

puis redémarrer lightdm comme suit :

service lightdm restart

Sur le poste de contrôle :
* Installer le paquet xnest si nécessaire, puis

Xnest :1 -query cubieboard

VNC

Sur la cubieboard. Installer un serveur VNC, par exemple tightvncserver (vnc4server exigera un mot de passe) :

apt-get install tightvncserver

Ajouter dans /etc/lightdm/lightdm.conf :

[VNCServer]
enabled=true

Attention XDMCP va écouter sur le port 177 en TCP, penser à le protéger sur un poste nomade ou qui n’est pas derrière un parre-feu

Vous pouvez le protéger comme suit (il faut être root ou le faire en sudo), si vous n’avez pas encore de règle. On définit d’abord l’adresse IP du seul host à autoriser dans la variable HOST_A_AUTORISER (j’ai donné 192.168.0.2 pour l’exemple, il faut le remplacer). Il peut être nécessaire d’autoriser la sortie si vous avec un DROP par défaut (ce que je conseillerais plutôt)

HOST_A_AUTORISER=192.168.0.2
iptables -I INPUT -p tcp --dport 5900 -m comment --comment "interdit tout VNC" -j DROP
iptables -I INPUT -p tcp --dport 5900 -s ${HOST_A_AUTORISER} -m comment --comment "autorise host toto VNC" -j ACCEPT

puis redémarrer lightdm comme suit :

service lightdm restart

Sur le poste de contrôle :
* Installer le paquet xvncviewer si nécessaire, puis

xvncviewer cubieboard

X协议

Il est également possible de lancer une application à distance via le protocol X, c’est un peu comme le tunnel X11 SSH mais en plus direct, sur un test glxgears LLVMpipe on passe de 17fps en tunnel SSH à 20fps en direct. C’est une des méthodes les plus complexes à mettre en place. Il ne faut l’utiliser que si le poste est protégé par un routeur en mode NAT avec un par feu limitant les adresses IP autorisées, sur un réseau local, ou éventuellement au travers d’un tunnel encrypté du genre VPN, mais avec bon chiffrement, car peut être très dangereux.

Par défaut, le protocole tcp X est désactivé sur le serveur X des distributions récentes. Pour l’activer, il faut modifier la ligne de /etc/X11/xinit/xserverrc en retirant la directive -nolisten tcp, à faire sur le serveur X (donc le poste client qui affichera l’application). Cela donnera quelque chose comme ça (attention, cela ne marche pas avec systemd) :

#!/bin/sh
#exec /usr/bin/X -nolisten tcp "$@"
exec /usr/bin/X "$@"

Attention XDMCP va écouter sur le port 6000 en TCP, penser à le protéger sur un poste nomade ou qui n’est pas derrière un parre-feu

Vous pouvez le protéger comme suit (il faut être root ou le faire en sudo), si vous n’avez pas encore de règle. On définit d’abord l’adresse IP du seul host à autoriser dans la variable HOST_A_AUTORISER (j’ai donné 192.168.0.2 pour l’exemple, il faut le remplacer). Il peut être nécessaire d’autoriser la sortie si vous avec un DROP par défaut (ce que je conseillerais plutôt)

HOST_A_AUTORISER=192.168.0.2
iptables -I INPUT -p tcp --dport 6000 -m comment --comment "interdit tout X11" -j DROP
iptables -I INPUT -p tcp --dport 6000 -s ${HOST_A_AUTORISER} -m comment --comment "autorise host toto X11" -j accept

Il faut ensuite relancer le serveur X.

Puis sur le poste client contenant le serveur X, il faut autoriser le serveur d’application à accéder à X :

xhost + $serveur_application

Et ajouter les règles d’autorisation de pare-feu. Par exemple, sur un poste utilisant le noyau Linux (interface locale est typiquement eth1 ou autre à déterminer :

iptables -I INPUT -s $serveur_application -d $serveur_X -i $interface_locale -p tcp -m tcp --dport 6000 -j ACCEPT -m comment --comment --comment "connexions X"
iptables -I OUTPUT -d $serveur_application -s $serveur_X -o $interface_locale -p tcp -m tcp --sport 6000 -j ACCEPT -m comment --comment "connexions X"

Sur le serveur d’application c’est le contraire :

iptables -I OUTPUT -s $serveur_application -d $serveur_X -o $interface_locale -p tcp -m tcp --dport 6000 -j ACCEPT -m comment --comment "connexions X"
iptables -I INPUT -d $serveur_application -s $serveur_X -i $interface_locale -p tcp -m tcp --sport 6000 --dport 1024: -j ACCEPT -m comment --comment "connexions X"

Sur le serveur d’application, il faut alors définir le client. Typiquement, sous bash :

export DISPLAY $serveur_X:0

Pour des raisons de sécurité et séparation des interfaces il est possible de l’afficher sur une session X différente de celle utiliser pour les travaux locaux (il faut dans ce cas tout préparer) :

export DISPLAY $serveur_X:1

Tester avec une commande de base xterm, xclock ou autre. Si ça fonctionne bien, cela devrait fonctionner avec n’importe quelle application.

串行接口(UART

如果没有网络还u-boot的时候还别的情况。接通(换x用接口号):
* 串行电缆连接电脑和Cubieboard,把控制电脑用/dev/ttySx接口。
* 标准 (PL2303) USB<=>串行电缆,把控制电脑用/dev/ttyUSBx接口。

SSH

ssh 客户@cubieboard

SSH+X11软体穿过SSH隧道协议

这个方法需要X11转发。 检查/etc/ssh/ssd_config里面:

X11Forward yes

假如你修正这个,要把sshd重新开动。

用这个方法,3D软体:
* 软件OpenGL还软件OpenGL ES行。
* 硬体OpenGL ES不行。
可以用LLVMpipe最快的软件( CPU/SIMD)OpenGL :

LIBGL_ALWAYS_SOFTWARE=1 $application

还可以用:

export LIBGL_ALWAYS_SOFTWARE=1
$application
ssh -X 客户@cubieboard

XDMCP

用这个方法,3D软体:
* 软件OpenGL还软件和硬体OpenGL ES一点都不行。可以用LLVMpipe

Cubieboard上加/etc/lightdm/lightdm.conf那个文字列:

[XDMCPServer]
enabled=true

然后重新开始lightdm:

service lightdm restart

在控制电脑:
* 假如没有,能安装xnest包裹。然后 :

Xnest :1 -query cubieboard

VNC

Cubieboard上加一个VNC服务器,比如tightvncserver (vnc4server要密码) :

apt-get install tightvncserver

/etc/lightdm/lightdm.conf那个文字列:

[VNCServer]
enabled=true

然后重新开始lightdm:

service lightdm restart

在控制电脑:
* 假如没有,能安装xvncviewer包裹。然后 :

xvncviewer cubieboard

发表评论