好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

412编号关于Linux跨网络运行XWindow程序.pdf

4页
  • 卖家[上传人]:玩***
  • 文档编号:146234364
  • 上传时间:2020-09-28
  • 文档格式:PDF
  • 文档大小:153.70KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 关于 Linux 跨网络运行 XWindow 程序 X Window 在设计上就是跨网络的,X Client 是需要图形显示的应用程序, X Server 则负 责具体显示和传递用户交互行为二者之间通信的协议称为 X Protocol,X 协议 基于主机验证的 X Window 配置 (1) 在 X Server 端,加入允许发送 X RequeST 的机器地址 $ xhost +192.168.0.1 关于 xhost 的用法示例: $ xhost -192.168.0.1 #取消 192.168.0.1 发送 X Request 到本机$ xhost + #允 许所有主机发送 X Request 到本机$ xhost + #再次执行该命令取消允许所有主机的授权 此外,可在/etc/X*.hosts 中永久加入某些授权主机,其中*是本机显示编号,比如 X0.hosts细节可看 man xhost 的说明 192.168.0.1192.168.0.2(2) 现在,就可以 ssh(可能需要配置 ssh 转发 X11 数据,我 没尝试过)或者 telnet 到 X Client 机器,并运行 X Window 应用程序,而显示和操作在 X Server 端。

      $ xeyes -display 192.168.0.254:0 其中 192.168.0.254 是(1)中配置的主机,后 面的:0 表示发送到 0 号显示屏幕有些 X 程序不支持-display 参数,此时可考虑导出 DISPLAY 环境变量 $ export DISPLAY=192.168.0.254:0 也许你会问,一台机器可以有多个显示屏幕吗?有 的,默认启动的屏幕为 0,不过你还可以启动多个对于 gdm 启动 X Window 的方式,你可 以修改/etc/X11/gdm/gdm.conf: 0=/usr/bin/X11/X -bpp 8 vt71=/usr/bin/X11/X -bpp 8 vt9...-bpp.参数指 定颜色数,此处为 8 位色深vt7 表示 Ctrl+Alt+F7 可切换到该屏幕,vt9 表示 Ctrl+Alt+F9你可以指定任意数目的显示屏幕 如果要配置不同屏幕的登录界面,可执行如下操作: $ cp /etc/X11/gdm/Init/Default /etc/X11/gdm/Init/:0$ cp /etc/X11/gdm/Init/Default /etc/X11/gdm/Init/:1 然后可修改其中的配置命令。

      对于 startx 启动 X Window 的方式,可直接在命令行指定,比如 startx -- :1 基于每用户验证的 X Window 配置 基本步骤是:先在 X Server 端的用户目录生成用户的 coOKIe,然后把该 cookie 加入到 X Client 的用户目录这样 X Client 程序运行的时候,会根据当前的 DISPLAY 搜寻 cookie 信息,并发送到 X Server,从而得到验证 因此,首先需要在 X Server 端生成 cookie,可用 xauth 命令 $ xauthUsing authority file /home/yingyuan/.Xauthorityxauthlist192.168.0.199/unix:0 MIT- MAGIC-COOKIE-1 8432567fa3ae2341xauthadd 192.168.0.199:0 MIT- MAGIC-COOKIE-1 8432567fa3ae2341xauthlist192.168.0.199/unix:0 MIT-MAGIC-COOKIE-1 8432567fa3ae2341192.168.0.199:0 MIT-MAGIC-COOKIE- 1 8432567fa3ae2341xauthexit 系统原来就有了一个 cookie,我们用 add 命令新 加了一个。

      那么,如何把 cookie 传递给 X Client 呢?实现方法有三种,以下分别介绍 (1) 直接把/.Xauthority 从 X Server 复制为 X Client 下的/.Xauthority这是 最简单的实现办法 (2) 用 xauth 的 extract 和 merge 命令 在 X Server 端, $ xauth...xauthextract MyCookie 192.168.0.199:0 xauthexit 然后 我们把 MyCookie 文件传到 X Client,并在 X Client 运行如下命令, $ xauth...xauthmerge MyCookiexauthexit(3) 记下 X Server 端的 cookie 值(用 xauth 的 list 可查看), $ xauth...xauthlist192.168.0.199/unix:0 MIT-MAGIC-COOKIE-1 8432567fa3ae2341192.168.0.199:0 MIT-MAGIC-COOKIE-1 8432567fa3ae2341xauthexit 然后在 X Client 用 xauth 的 add 添加 到.Xauthority 文件。

      $ xauth...xauthadd 192.168.0.199:0 MIT-MAGIC-COOKIE-1 8432567fa3ae2341xauthexitX Window 为我们运行程序提供了很大的灵活性,不 是一般的 GUI 操作系统所能比拟的Microsoft Windows 可以通过运行 X OnNet、X- WinPro、Omni-X 等程序提供 X Server 服务,从而可以运行 Linux 上的 X Client 程 序 ========================================= Error: cant open display! ======================================== 在 Linux/Unix 类操作系统上, DISPLAY 用来设置将图形显示到何处. 直接登陆图形界面 或者登陆命令行界面后使用 startx 启动图形, DISPLAY 环境变量将自动设置为:0:0, 此 时可以打开终端, 输出图形程序的名称(比如 xclock)来启动程序, 图形将显示在本地窗口 上, 在终端上输入 printenv 查看当前环境变量, 输出结果中有如下内容: DISPLAY=:0.0 使用 xdpyinfo 可以查看到当前显示的更详细的信息. DISPLAY 环境变量格式如下 hostname: displaynumber.screennumber,我们需要知 道,在某些机器上,可能有多个显示设备共享使用同一套输入设备,例如在一台 PC 上连接两 台 CRT 显示器,但是它们只共享使用一个键盘和一个鼠标。

      这一组显示设备就拥有一个共同 的 displaynumber,而这组显示设备中的每个单独的设备则拥有自己单独的 screennumberdisplaynumber 和 screennumber 都是从零开始的数字这样,对于我 们普通用户来说, displaynumber、screennumber 就都是 0 hostname 指 Xserver 所在的主机主机名或者 ip 地址, 图形将显示在这一机器上, 可以是启动了图形界面的 Linux/Unix 机器, 也可以是安装了 Exceed, X-Deep/32 等 Windows 平台运行的 Xserver 的 Windows 机器. 如果 Host 为空, 则表示 Xserver 运行于本机, 并且图形程 序(Xclient)使用 unix socket 方式连接到 Xserver, 而不是 TCP 方式. 使用 TCP 方式 连接时, displaynumber 为连接的端口减去 6000 的值, 如果 displaynumber 为 0, 则 表示连接到 6000 端口; 使用 unix socket 方式连接时则表示连接的 unix socket 的路 径, 如果 displaynumber 为 0, 则表示连接到/tmp/.X11-unix/X0 . screennumber 则几乎总是 0. 如果使用 su username 或者 su - username 切换到别的用户, 并且使用命令 export DISPLAY=:0.0 设置 DISPLAY 环境变量, 运行图形程序(如 xclock)时会收到如下错误: Xlib: connection to :0.0 refused by server Xlib: No protocol specified Error: Cant 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 端口. 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.