[转]DISPLAY环境变量的作用

作者:sealinger 发布时间:August 7, 2011 分类:混口饭吃 No Comments

DISPLAY环境变量的作用
原文连接:http://www.cublog.cn/u/7667/showart.php?id=141782

在Linux/Unix 类操作系统上, DISPLAY用来设置将图形显示到何处. 直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0.0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量, 输出结果中有如下内容:

DISPLAY=:0.0

使用xdpyinfo可以查看到当前显示的更详细的信息。

DISPLAY 环境变量格式如下host:NumA.NumB, host指Xserver所在的主机主机名或者ip地址, 图形将显示在这一机器上, 可以是启动了图形界面的Linux/Unix机器, 也可以是安装了Exceed, X-Deep/32等Windows平台运行的Xserver的Windows机器. 如果Host为空, 则表示Xserver运行于本机, 并且图形程序(Xclient)使用unix socket方式连接到Xserver, 而不是TCP方式. 使用TCP方式连接时, NumA为连接的端口减去6000的值, 如果NumA为0, 则表示连接到6000端口; 使用unix socket方式连接时则表示连接的unix socket的路径, 如果为0, 则表示连接到/tmp/.X11-unix/X0 . NumB则几乎总是0.

如果使用su username或者su - username切换到别的用户, 并且使用命令

export DISPLAY=:0.0

设置DISPLAY环境变量, 运行图形程序(如xclock)时会收到如下错误:

Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified

Error: Can't open display: :0.0

这是因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上. 如果需要别的用户的图形显示在当前屏幕上, 则应以当前登陆的用户, 也就是切换身份前的用户执行如下命令:

xhost +

这个命令将允许别的用户启动的图形程序将图形显示在当前屏幕上。

在2台Linux机器之间, 如果设置服务器端配置文件/etc/ssh/sshd_config中包含

X11Forwarding no

客户端配置文件/etc/ssh/ssh_config包含

ForwardX11 yes

则从客户端ssh到服务器端后会自动设置DISPLAY环境变量, 允许在服务器端执行的图形程序将图形显示在客户端上. 在服务器上查看环境变量显示如下(这个结果不同的时候并不相同):

DISPLAY=localhost:10.0

在客户机上用netstat -lnp可以看到有程序监听了6010端口

tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN     4827/1

如果希望允许远程机器上的图形程序将图形显示在本地机器的Xserver上, 除了要设置远端机器的DISPLAY环境变量以外, 还需要设置本地机器的Xserver监听相应的TCP端口. 而现在的Linux系统出于安全的考虑, 默认情况下不再监听TCP端口. 可通过修改/etc/X11/xinit/xserverrc文件, 将

exec /usr/bin/X11/X -dpi 100 -nolisten tcp

修改为

exec /usr/bin/X11/X -dpi 100

允许在直接使用startx启动图形时启动对TCP端口的监听。

修改/etc/kde3/kdm/kdmrc, 将

ServerArgsLocal=-nolisten tcp

修改为

ServerArgsLocal=

允许kdm作为显示管理器时, 启动会话时监听相应的TCP端口。

修改/etc/gdm/gdm.conf, 在[Security]一节增加

DisallowTCP=false

或者在登陆窗口选择"Options" -> "Configure Login Manager..."的Security页面, 取消"Deny TCP connections to Xserver", 允许gdm作为显示管理器时, 启动会话时监听相应的TCP端口。

[初级教程]用SecureCRT+Xming轻松远程实现linux的X DISPLAY

作者:sealinger 发布时间:July 5, 2011 分类:混口饭吃 2 Comments

测试环境:RHEL 6.1,SecureCRT 5.2.1,Xming 6.9.0.31

-----------------------------------------------
引用:http://www.zw1840.com/blog/zw1840/2008/10/putty-xming-linux-gui.html

在家里的PC上用VMWare做了一个Oracle Enterprise Linux虚拟机做数据库,虚拟机OEL没启用图形界面,因此需要在PC上装一个X Window Server才能使用GUI。

看Wiki系统地了解了一下X Window System。X Window System(常被简称为X11或X),是一套基于X display protocol的windowing system,X GUI环境的功能包括窗口的绘制、移动,以及与鼠标、键盘等输入设备的交互。X 协议当前版本为MIT在1987年9月制定的11版----这就是X11的来历,最新版则是2008年9月发布的X11R7.4。

X采用C/S模型:一个X server 和多个应用程序(client)通信。server接收client的请求绘制窗口,并将来自鼠标、键盘等设备的输入传递给client。

初学X的用户经常被描述如何远程使用Linux GUI环境的文档搞糊涂:Linux主机上的应用程序被称为client,而用户终端计算机被称为server,看上去好像说反了。实际上,X是从程序结构而非用户或硬件环境的角度来描述的,在用户终端上工作的X server为应用程序提供服务,所以被看作server,而Linux主机上的应用程序接受服务,所以被看作client。

X server和client可以位于同一计算机上,例如在Linux主机上使用KDE等桌面环境就是这种模式。X server也可以通过同构网络、异构网络或Internet与client通信。

X server与client之间的通信是不加密的,这个问题可以通过SSH解决。SSH是Secure Shell的简称,SSH可以看作是通信被加密压缩版的telnet。我需要用到SSH的forwarding功能,当X server与client所在计算机都支持SSH协议时,X server与client之间不安全的TCP/IP连接可以转送到(forwarding)二者之间建立的SSH连接上。

说了一堆概念,现在可以挽起袖子干活了。Linux主机(A, IP: 192.168.1.201)和Windows客户机(B, IP: 192.168.1.101)都已经装好了,我要做的就是在 B 上安装一个X server,一个SSH客户端,在A上启用SSH的X11 forwarding。
-----------------------------------------------
1. 安装配置B上的X server

X server我选择的是Xming,这是一个免费的windows平台上的X server,很好用。
主程序Xming X server, Xming-6-9-0-31-setup.exe

安装完成后,运行 XLaunch 配置和启动Xming X server,前面基本都是直接“下一步”,

Display 代表一套 I/O 设备,包括显示、鼠标、键盘;Display Number 就是这套 I/O 设备的代号;同时 Display Number 还决定了 Xming X server 的 TCP 端口,端口号为 6000 + Display Number。Linux 主机上的应用程序通过此端口建立与 Xming X server 的连接。

有一个地方需要注意:最好是勾选“No Access Control”:

否则Linux可能会提示“refused by server”:

Xlib: connection to "192.168.10.8:0" refused by server
Xlib: No protocol specified

Error: Can't open display: 192.168.10.8:0

2.接着在Putty或SecureCRT中启用“Enable X11 forwarding”即可

putty

SecureCRT

現在在工作站執行 GUI 程式,就會出現在你的 Windows 桌面上啦!试试xeyes或xev,是不是很好玩?!

广州市天河区办理边境通行证

作者:sealinger 发布时间:June 10, 2011 分类:简单生活 No Comments

因西藏有许多旅游地区属于我国边境或非完全开放区域,故我国公民(包括港澳同胞)进入此地区旅游参观必须办理边境证,否则不需进入。对于持有有效护照,且此护照办理过出境签证(即走活的护照),可以免办边境证。

到西藏旅游需要办理边境证的旅游点:日喀则地区:仲巴县、萨嘎县、聂拉木县(樟木)、定日县、康马县、亚东县、岗巴县、定结县、吉隆县;山南地区:错那县、隆子县、洛扎县、浪卡子县;林芝地区:米林县、朗县、察隅县、墨脱县;阿里地区:普兰县、扎达县、日土县、噶尔县。

广州市天河区的朋友办理方法如下:

地点:广州市公安局天河区分局办证大厅-出入境管理科

地址:瘦狗岭路611-613号

时间:周一至周五8:30~17:30,中午12:00~14:00休息,周六上午

所需材料:户口本原件和复印件、身份证原件和复印件、《边境通行证申请表》(不需要照片)

注意事项:

1)只能本市户口才能办理,非本市户口不能办(已经过去问过了,下面那个须知是坑爹的``);

2)申请表必要条件:单位盖章+意见(同意、签字)或身份证所在派出所盖章+意见;两者都有更保险;

3)申请表上的“前往地点”:就填 日喀则、山南、林芝、阿里 四个地区就行了。

4)出发前办理,因为时间最多1个月,且从办证日开始算。


http://www.gzjd.gov.cn/pub/index_jsp_catid_81_84_id_3303.html

本市常住户口人员申办边境通行证须知

一、本市常住户口人员需前往深圳、珠海特区的,先填写申请表,凭居民身份证及申请表到辖区公安分局、县级市公安局户政部门或户口所在地派出所办理《边境通行证》。
二、本市常住户口人员前往外省、自治区边境管理区的,先填写申请表,由单位保卫(人事)部门或常住户口所在地派出所提出审核意见后,凭居民身份证和申请表到所属区公安分局、县级市公安局办理。
  
  咨询电话:83112080      投诉电话:83118310

2003-09-22
http://www.gzjd.gov.cn/pub/index_jsp_catid_81_84_id_3302.html

外省、市来穗人员申办边境通行证须知

一、在本市就业的流动人员,前往深圳、珠海特区的,填写《边境通行证》申请表(以下简称申请表)后,凭居民身份证、广州市IC卡暂住证或广东省流动人员暂住证及申请表到所属区公安分局、县级市公安局户政部门或派出所办理。
二、来穗出差、学习、探亲的外省、市人员需前往深圳、珠海特区的,先填写申请表,由接待单位人员或亲属凭本人工作证或居民身份证和申请人居民身份证,到所属区公安分局、县级市公安局户政部门或派出所办理。

  咨询电话:83112080        投诉电话:83118310

2003-12-01

nginx fastcgi_buffers设置(an upstream response is buffered to a temporary file)

作者:sealinger 发布时间:May 2, 2011 分类:混口饭吃 No Comments

运行环境:nginx-0.8.53 + PHP5(with fast-cgi)

打开nginx的warn级别error_log,看到如下信息:

2011/04/23 17:24:08 [warn] 9639#0: *44 an upstream response is buffered to a temporary file /tmp/fastcgi_temp/8/0/0000000008 while reading upstream, client: 118.118.118.118, server: sealinger.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.sealinger.com"

参考《分析 fastcgi_temp 错误以及 Nginx 的 Buffer 机制》一文:

先简单的说一下 Nginx 的 buffer 机制,对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制。

比如如下配置:

fastcgi_buffers      8 4K;
fastcgi_buffer_size  4K;

fastcgi_buffers 控制 nginx 最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。所以总计能创建的最大内存缓冲区大小是 8*4K+4K = 36k。而这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 8K 的页面,Nginx 会创建 2*4K 共 2 个 buffers。

当 Response 小于等于 36k 时,所有数据当然全部在内存中处理。如果 Response 大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。同时你会在 error.log 中看到一条类似 warning。

显然,缓冲区设置的太小的话,Nginx 会频繁读写硬盘,对性能有很大的影响,但也不是越大越好,没意义,呵呵!

一步步调整参数,直到没有这个warn信息:

    #syntax: fastcgi_buffers the_number is_size 
    #default: fastcgi_buffers 8 4k/8k 
    #context: http, server, location 
    #fastcgi_buffers 256 4k; # Sets the buffer size to 4k + 256 * 4k = 1028k
    fastcgi_buffers 32 4k;

阅读剩余部分...

iptables ip_conntrack_max 调整

作者:sealinger 发布时间:April 29, 2011 分类:混口饭吃 No Comments

一、概念

====================

-允许的最大跟踪连接条目:CONNTRACK_MAX(默认值是 2^16=65536 )
-存储跟踪连接条目列表的哈西表的大小:HASHSIZE
-每个哈西表的条目(叫一个bucket),包含了一个链接起来的跟踪连接条目
-哈希表大小HASHSIZE,表现为 条目bucket的多少,在iptables启动时在日志中会显示。

图表形象解释:

例如,系统默认配置下,启动 iptables 时的信息如下:

ip_conntrack version 2.4 (8192 buckets, 65536 max) - 304 bytes per conntrack

二、实战:调大 conntrack_max 参数(2.6内核)

========================================

1)增大 ip_conntrack_max(设置为 2^20,默认值是 2^16=65536)

# vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max = 1048576

2)增大 hashsize (在i386架构上,HASHSIZE = CONNTRACK_MAX / 8

# vi /etc/modprobe.conf

options ip_conntrack hashsize=131072

然后重启 iptables 服务,在 messages中可以看到参数已生效:

# service iptables restart

# tail /var/log/messages
Feb 27 04:02:02 dispatcher syslogd 1.4.1: restart.
Feb 27 17:45:01 dispatcher auditd[3924]: Audit daemon rotating log files
Mar  1 11:47:13 dispatcher kernel: Removing netfilter NETLINK layer.
Mar  1 11:47:13 dispatcher kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
Mar  1 11:47:13 dispatcher kernel: Netfilter messages via NETLINK v0.30.
Mar  1 11:47:13 dispatcher kernel: ip_conntrack version 2.4 (131072 buckets, 1048576 max) - 228 bytes per conntrack

注:只修改 net.ipv4.ip_conntrack_max = 1048576 ,重启iptables服务,messages信息中 (8192 buckets, 65536 max) 不变。

阅读剩余部分...