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 平台)中。
有一个名为 **startx** 的程序可以启动 X11。它很简单易用
$ startx
这将为您提供一些默认环境。但是,如果您想自定义默认环境,使用 **xinit** 可能更容易。**startx** 脚本会查找几个文件(~/.Xresources, ~/.Xmodmap,……)并加载它们;它使用的文件在每个系统上都不同,因此您可能需要阅读系统上的 **startx** 脚本以了解它的工作原理。
相反,**xinit** 程序只启动一个 X 服务器并运行一个~/.xinitrc脚本。无需记住您的系统是否将其称为“.Xresources”或“.xresources”或“.xrdb”;您只需在“~/.xinitrc”中指定您想要的确切行为。
如果您破坏了“.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 环境变量中。
如果您没有在程序名称中指定斜杠,那么“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 是所需格式的典型文件名扩展名。