跳转到内容

X11 指南/启动会话

来自维基教科书,开放的书籍,开放的世界

作者 · 历史 · 打印 · 许可

介绍 · 配置 · 构建 · 启动会话 · 启动程序 · 字体 · 窗口管理器 · Xt 客户端 · 政治历史 · 参考资料和链接

补充: 命令

编辑此模板

启动会话

[编辑 | 编辑源代码]

本章介绍 **如何启动 X11 会话**。

本章将回答以下问题

  • 启动 X11 的不同方法有哪些?
  • 如何启动 X11 和窗口管理器?
  • 如何控制启动哪些窗口管理器和程序?
  • 是否有办法使字体看起来更漂亮?

启动 X11 的方法

[编辑 | 编辑源代码]

回想一下,X11 由一个 *X 服务器* 和多个客户端组成。如果您只启动 X 服务器,您将得到一个空白屏幕。需要的是一种启动 X 服务器以及一些默认客户端(如窗口管理器)的方法。

首先,一些 Unix 控制台提供纯文本登录提示符。在这种情况下,首先像往常一样登录以获取您的 Unix shell,然后使用 **xinit** 或 **startx** 命令在 shell 中启动 X 服务器和默认客户端。

其次,一些 Unix 控制台具有图形登录提示符!在这种情况下,系统启动脚本已经启动了 X 服务器;一个名为 *显示管理器* 的程序已经绘制了一个图形用户界面,允许您键入用户名和密码。在这种情况下,当您登录时,您将立即开始使用 X11。

第三,一些系统正在使用非 X11 的图形环境。例如,Mac OS X 有其自己的 *Quartz* 系统。在 Mac OS X 中,您启动 X11.app 程序,这是一个 X 服务器,允许 X 客户端出现在与您其他 Mac 程序相同的桌面上。类似的程序也存在于 Microsoft Windows(不是 Unix 平台)中。

xinit 和 startx

[编辑 | 编辑源代码]

有一个名为 **startx** 的程序可以启动 X11。它很简单易用

$ startx

这将为您提供一些默认环境。但是,如果您想自定义默认环境,使用 **xinit** 可能更容易。**startx** 脚本会查找几个文件(~/.Xresources, ~/.Xmodmap,……)并加载它们;它使用的文件在每个系统上都不同,因此您可能需要阅读系统上的 **startx** 脚本以了解它的工作原理。

相反,**xinit** 程序只启动一个 X 服务器并运行一个~/.xinitrc脚本。无需记住您的系统是否将其称为“.Xresources”或“.xresources”或“.xrdb”;您只需在“~/.xinitrc”中指定您想要的确切行为。

在没有 .xinitrc 的情况下使用 xinit

[编辑 | 编辑源代码]

如果您破坏了“.xinitrc”,或者还没有“.xinitrc”,那么您可以启动一个。例如

these will work
$ xinit /usr/X11R6/bin/xterm
$ xinit $(which xterm)
this will NOT work
$ xinit xterm

这将启动一个 X 服务器和一个名为“xterm”的程序,您可以使用它来启动更多 X 客户端。最后一行会失败(即使“xterm”在您的 PATH 中),因为 xinit 假设它是一个参数,而不是一个程序。您必须在程序名称中包含一个斜杠 /。

如果您有 KDE,您可以找到您的 **startkde** 脚本

$ which startkde
/usr/local/bin/startkde

然后您可以启动 KDE

$ xinit /usr/local/bin/startkde

这将允许您使用 Konqueror 找到您的“.xinitrc”并使用 Kate 编辑它。(浏览您的主目录时,在“查看”菜单中检查“显示隐藏文件”。)

如果您看到类似的提示

$ xinit
/bin/ksh: xinit: not found

… 那么您需要添加/usr/X11R6/bin到您的 PATH 环境变量中。

如何编写 .xinitrc

[编辑 | 编辑源代码]

如果您没有在程序名称中指定斜杠,那么“xinit”将使用您的.xinitrc脚本,该脚本位于您的主目录中。

$ xinit            # starts .xinitrc
$ xinit xterm      # passes "xterm" as argument to .xinitrc

在使用“xinit”之前,需要一个名为.xinitrc的文件,该文件位于他们的主目录中。因为文件名以点号开头,所以该文件通常是不可见的。有一些方法可以从 shell 中处理不可见文件

$ cd               # changes current directory to home directory
$ ls -a            # list all files, including dotfiles
$ ls .xinitrc      # list the .xinitrc file
$ vi .xinitrc      # edit .xinitrc using vi
$ emacs .xinitrc   # edit it using Emacs

“.xinitrc”只是一个 Bourne shell 脚本。您可以尝试使用 **sh .xinitrc** 运行它,但它会失败,除非您已经启动了 X 服务器。您可以像在 Unix shell 中键入命令一样在其中输入命令。如果您不理解这一点,请尝试从下面的示例开始。

这是一个简单的一行“.xinitrc”示例

exec startkde

“startkde”命令启动 KDE 桌面环境。此命令不会在您注销 KDE 之前结束。通常,shell 会等待 KDE 结束,然后运行下一条命令。此命令前面的“exec”前缀告诉 shell 这是最后一条命令,因此 shell 无需等待运行下一条命令。“exec”在此情况下是可选的。

这是一个更复杂的“.xinitrc”示例

ulimit -Sn 512
/usr/bin/mixerctl monitor.master=5,5
/usr/X11R6/bin/xmodmap -e 'keycode 107 = BackSpace'
case "$#" in
0)
  exec sh /etc/X11/xinit/xinitrc
  ;;
*)
  session="$1"
  shift
  exec "$session" "$@"
 ;;
esac

# NOTREACHED
exec /usr/X11R6/bin/xterm

第一行,“ulimit -Sn 512”,是一个 Bourne shell 命令,用于将打开文件“-n”的软限制“-S”增加到 512。(使用 **ulimit -a**,或者如果您的 shell 不是 Bourne shell,请使用 **sh -c 'ulimit -a' **,查看您的默认限制。)下一条命令,** /usr/bin/mixerctl monitor.master=5,5 **,将 OpenBSD 或 NetBSD 系统上的音量设置为左右声道均为 5。在其他 Unix 系统上,命令将不同。可以添加许多其他命令。

第三行,“/usr/X11R6/bin/xmodmap -e 'keycode 107 = BackSpace'”(或者只是“xmodmap -e 'keycode 107 = BackSpace'”),调整键盘映射。对于只进行少量调整的用户来说,这可能比加载一个 * .Xmodmap* 文件更容易。(您可以使用 **xmodmap ~/.Xmodmap** 加载此类文件。)

其余行构成了 Bourne Shell “case”语句。它们处理命令行参数以启用以下功能

$ xinit gnome-session # start GNOME
$ xinit startkde,GNOME # start KDE
$ xinit fvwm,KDE# start window manager fvwm
$ xinit xtermfvwm       # start an xterm without a window manager

请注意,由于没有一个程序在其中包含斜杠,因此它们由“.xinitrc”脚本处理,而不是直接由“xinit”处理。

示例~/.xsession:

. ~/.profile

managers=startkde,fvwm,wmaker
prompt="Welcome, $USER@$(hostname), select window manager:"

# miscellaneous setup
xmodmap -e 'keycode 107 = BackSpace'
test -f /usr/local/GNUstep/System/Makefiles/GNUstep.sh &&
        . /usr/local/GNUstep/System/Makefiles/GNUstep.sh

manager="$(xmessage -buttons "$managers" -print -center "$prompt")"
test -z "$manager" && exec fvwm
exec "$manager"

截取屏幕截图

[编辑 | 编辑源代码]

用于转储 X 窗口图像的标准实用程序是xwd(1),xwd 生成一个 XWD 图像。它可以以以下方式调用

xwd -root -out root.xwd

xwd 还可以用于转储使用鼠标选择的单个窗口或使用-id选项后跟相应的窗口 ID;有关更多信息,请参见man 1 xwd [1]。在远程运行时,xwd 对于截取正在操作的模态菜单的屏幕截图非常有用。GIMP 可用于将 XWD 文件转换为其他更常见的格式,例如 PNG;等效地,命令行实用程序 **xwdtopnm**(Netpbm 实用程序套件的一部分)可用于将 XWD 文件转换为 PNM 格式,然后可以将其转换为任何常见的格式,例如使用以下 管道

xwd | xwdtopnm | pnmtopng > screendump.png

也可以使用convert实用程序(在此处可用)将 XWD 图像转换为许多其他格式:convert root.xwd root.XYZ,其中 XYZ 是所需格式的典型文件名扩展名。


华夏公益教科书