很多时候在linux开发,需要进行一些图形方面的展示,比如python画图、查看照片等等,此时就需要windows来帮助远端的linux服务器进行显示。主要依托于XManager,客户端使用xshell,其他可以类似配置,详细请继续往下看,包教包会。
XManager安装
Xmanager 是一款小巧、便捷的浏览远端X窗口系统的工具。在工作中经常使用Xmanager来登录远端的Solaris系统,在X窗口系统上作图形化的操作。
下载地址:http://rj.baidu.com/soft/detail/35931.html
windows软件安装,so easy~,序列号在网上找个就可以了。
gtk安装
GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。
说简单点,GTK是linux下的一个图形开发包,不是必装,但是为了我们方便测试,我们现在还是把它装了吧。下面安装需要root权限哦。
yum groupinstall "Development Tools"
yum install gtk+-devel gtk2-devel
测试:gtk-demo
提示肯定如下:
(gtk-demo:14550): Gtk-WARNING *: cannot open display:*
这就对了,安装完了,但是还不能执行gtk-demo。
Xshell设置
下面的设置就是windows授权xshell可以将linux服务端的图形显示拿来让我windows显示。
xshell登陆了某个服务器后,点文件→属性→ssh下面的隧道,勾选转发X11链接到(X),下面选Xmanager。
当然,现在测试gtk-demo还是不行的,后面会不停遇到上面那个错误。
ssh设置
上面只是windows允许了,linux这边还没有允许呢,所以需要对ssh进行设置。
vim /etc/ssh/sshd_config #need root user
去掉下面四行前面的注释:
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
UseDNS no
保存后需要重新加载:
service sshd reload
xauth安装
xauth命令用于显示和编辑被用于连接X服务器的认证信息。也就是这个命令用来授权控制链接Xmanager的用户。
yum install xorg-x11-xauth
安装完后,可以试一下xauth命令,不过又会出现另一个非常恶心的错误,就是:
xauth: file /root/.Xauthority does not exist
不用理会。
SSH -Y登陆
我们切换到自己的普通账户,执行下面的命令:
ll -a /home/yourname
看看下面有没有一个.Xauthority文件,答案是没有,好,见证奇迹的时刻来了,我们执行下面的命令,就在自己的账户、本台服务器上:
ssh -Y yourname@host
ll -a /home/yourname
貌似还是没有.Xauthority文件,奇迹并没有发生,我们继续努力。
安装xhost
yum install xorg-x11-server-utils
再进行ssh -Y yourname@host,发现.Xauthority文件有了,还是很不错的。
执行gtk-demo,但是可能还会提示:
connect localhost port 6000: Connection refused,很崩溃啊,(⊙﹏⊙)b
网友说是得安装:openssh-server,那我们就安装个试试。
安装openssh-server
yum install openssh-server
然后再试gtk-demo,fu*k,成功了!
但是,有些还是提示了编码错误(不过总算打开了),
(gtk-demo:1267): Pango-WARNING : failed to choose a font, expect ugly output. engine-type=’PangoRenderFc’, script=’latin’
广大网友还是很厉害的,通过下面的办法可以解决:
yum install dejavu-lgc-sans-fonts
不信你再试,肯定可以看到下面的界面了。
python几个测试
安装PIL库
建议直接安装anaconda,这个python很好用,自带很多库。
wget https://repo.continuum.io/archive/Anaconda2-4.4.0-Linux-x86_64.sh
sh Anaconda2-4.4.0-Linux-x86_64.sh
打开图片
from PIL import Image
im = Image.open('test.jpg')
im.show()
是不是显示了?!~,然后并没有,安装ImageMagick。
yum install ImageMagick
重试,便可。
画一个图
#-*-coding:utf-8-*-
import os
import sys
import numpy as np
from PIL import Image,ImageDraw
reload(sys)
sys.setdefaultencoding('utf8')
import matplotlib.pyplot as plt
src=Image.open('1.jpg')
r,g,b=src.split()
plt.figure("lena")
ar=np.array(r).flatten()
plt.hist(ar, bins=256, normed=1,facecolor='r',edgecolor='r',hold=1)
ag=np.array(g).flatten()
plt.hist(ag, bins=256, normed=1, facecolor='g',edgecolor='g',hold=1)
ab=np.array(b).flatten()
plt.hist(ab, bins=256, normed=1, facecolor='b',edgecolor='b')
plt.show()
plt.figure(1) # 创建图表1
plt.figure(2) # 创建图表2
ax1 = plt.subplot(211) # 在图表2中创建子图1
ax2 = plt.subplot(212) # 在图表2中创建子图2
x = np.linspace(0, 3, 100)
for i in xrange(5):
plt.figure(1) #❶ # 选择图表1
plt.plot(x, np.exp(i*x/3))
plt.sca(ax1) #❷ # 选择图表2的子图1
plt.plot(x, np.sin(i*x))
plt.sca(ax2) # 选择图表2的子图2
plt.plot(x, np.cos(i*x))
plt.show()
下面是程序的展示图:
sudo用户配置
上面的配置都是在自己的个人账户下,而且经过了ssh -Y的二次连接,如果sudo到其他账户的话,是不能够生效的。所以还需要下面的几步设置才能保证sudo后还能正常使用。
本地xshell配置
之前连接都需要ssh -Y(和设置转发X11一样),我们需要做的是在xshell本地设置成X11 转发,这样每次连接就相当于自动添加了-Y,如下图:
个人账户设置
在自己账户下:
vim ~/.bashrc
添加下面一句,也就是登陆的时候自动把授权信息打印出来,否则没办法直接访问:
xauth list > /home/sudo_user/.xauth.list
source ~/.bashrc
这样在登陆自己账户的时候,就可以把xauth的授权信息cat出来了。
sudo账户设置
sudo -i -u sudo_user
vim ~/.bashrc
添加下面一句,把个人账户cat出的xauth信息添加到该sudo_user下:
cat /home/sudo_user/.xauth.list | while read line; do xauth add $line;done
如此设置,就可以使得sudo_user也能够使用个人账户的授权信息了。
上面的设置可以参考下:http://blog.csdn.net/xeseo/article/details/11963473
请大家自己实践:xauth list 和 xauth add命令的作用。
附小知识
ssh附带其他命令,比如sudo的办法(采用-tt选项):
ssh -tt -Y own_user@host "sudo -i -u sudo_user"
Over~~~