操作系统 - startx/xinit

article/2025/10/2 14:27:59
  • 了解startx/xinit

1.概述

  用户可以通过 xinit 程序手动启动 Xorg 显示服务器,startx脚本是 xinit 的前端。

  xinit 通常用在启动 X 时执行窗口管理器 或 桌面环境。虽然可以使用 xinit 在无窗口管理器的情况下启动图形程序,大部分图形程序都需要一个兼容 EWMH 的窗口管理器。显示管理器 启动 Xorg 并读取 xprofile。

  启动X主要有两种方法:

  • 一是Display Manager,如XDM、GDM、KDM,此种方法通过图形界面登录;
  • 另一种是通过xinit,此种方法适用于字符界面登录。

  常用于登录X的startx命令也是通过传递参数给xinit来启动X的,也就是说,最终启动X的是xinit。startx只是一个bash脚本。

1.1.startx

  The startx script is a front end to xinit that provides a somewhat nicer user interface for running a single session of the X Window System. It is often run with no arguments.

  startx命令用来启动X-Window,它负责调用X-Window系统的初始化程序xinit。以完成 X-Window运行所必要的初始化工作,并启动X-Window系统。

  startx 最重要的任务就是找出使用者或者是系统默认的 X server 与 X client 的配置档,而使用者也能够使用 startx 外接参数来取代配置档的内容。这个意思是说:startx 可以直接启动,也能够外接参数,例如底下格式的启动方式:

[root@www ~]# startx [X client 参数] – [X server 参数]
在这里插入图片描述

参考实例:
已默认方式启动X-windows系统:
[root@linuxcool ~]# startx以16位颜色深度启动X-windows系统:
[root@linuxcool ~]# startx -- -depth 16强制启动 X-windows系统:
[root@linuxcool ~]# startx -w要使用 .xinitrc 脚本启动 X 会话,请输入:
startx -x .xinitrc要使用 mwm 窗口管理器启动 X 会话,请输入:
startx -m mwm

1.2.xinit

  当 startx 找到需要的配置值后,就呼叫 xinit 实际启动 X 。xinit先启动先启动X服务器,再启动基于X的应用程序。事实上启动 X 的是 xinit 这支程序, startx 仅是在帮忙找出配置值而已!那么 startx 找到的配置值可用顺序为何呢?基本上是这样的:

  • X server 的参数方面:
    使用 startx 后面接的参数;
    若无参数,则找寻使用者家目录的文件,亦即 ~/.xserverrc
    若无上述两者,则以 /etc/X11/xinit/xserverrc
    若无上述三者,则单纯运行 /usr/bin/X (此即 X server 运行档)

  • X client 的参数方面:
    使用 startx 后面接的参数;
    若无参数,则找寻使用者家目录的文件,亦即 ~/.xinitrc
    若无上述两者,则以 /etc/X11/xinit/xinitrc
    若无上述三者,则单纯运行 xterm (此为 X 底下的终端机软件)

1.2.1.启动 X server 的文件: xserverrc

  xserverrc 文件是一个启动 X server 的 shell 脚本。如果存在 ~/.xserverrc ,startx 和 xinit 都会执行这个文件。如果文件不存在,startx 会使用 /etc/X11/xinit/xserverrc.

  1 #!/bin/sh                                                                                                                                                                                                                                2 3 exec /usr/bin/X -nolisten tcp "$@"                                       

  X 窗口最先需要启动的就是 X server,那 X server 启动的脚本与参数是透过 /etc/X11/xinit/ 里面的 xserverrc 。其实就是运行 /usr/bin/X 这个命令啊! 这个命令也是系统最原始的 X server。

  在启动 X Server 时,Xorg 会去读取 /etc/X11/xorg.conf 这个配置档。如果一切顺利,那么 X 就会顺利的在 tty7 的环境中启动了 X 。 单纯的 X 启动时,你只会看到画面一片漆黑,然后中心有个鼠标的光标而已。

  启动了 X server 后,接下来就是加载 X client 到这个 X server 上面啦!

1.2.2.xinitrc

  假设家目录并没有 ~/.xinitrc ,则此时 X Client 会以 /etc/X11/xinit/xinitrc 来作为启动 X Client 的默认脚本。最后,其实最终就是加载 KDE 或者是 GNOME 而已。

  ~/.xinitrc 可以方便的启动依赖 X 的程序,并在 X 启动时设置环境变量。如果用户主目录中存在 .xinitrc,startx 和 xinit 会执行此文件。如果不存在,startx 会执行默认的 /etc/X11/xinit/xinitrc。

  /etc/X11/xinit/xinitrc:7 # invoke global X session script8 . /etc/X11/Xsession   

1.2.3.Xsession

  A display manager refers to a user’s login and startup of a window manager and desktop as a session. When the user quits the desktop and logs out, the session ends. When another user logs in, a new session starts. The X Window System never shuts down; only desktop or window manager programs shut down. Session menus on the display manager login window list different kinds of sessions you can start—in other words, different kinds of window managers or desktops. For each session, the Xsession script is the startup script used to configure a user’s X Window System display and to execute the selected desktop or window manager. Although this script is unnecessary for gdm, it is still used in the gdm Red Hat implementation.

  Xsession is the display manager session startup script used by the Red Hat implementation of gdm (other display managers such as kdm and xdm also use Xsession). It contains many of the X commands also used with the xinitrc startup script. Xsession usually executes the same xmodmap and xrdb commands using the .Xmodmap and .Xrsources files in the /etc/X11/xinit directory. Shown here is the Xsession script used by gdm on Red Hat systems, which is located in the /etc/X11/xdm directory. Notice that any errors are saved in the user’s .xsession-errors file in their home directory. Xsession will also read any shell scripts located in the /etc/X11/xinit/xinitrc.d directory. Currently this holds an input script to detect the kind of language a keyboard uses.

  • /etc/X11/Xsession.d/00deepin-dde-env:
  1 if [ "$1" = "/usr/bin/startdde" ]; then                                                                                                                                                                                                  2     if [ -f "$HOME/.dde_env" ]; then3         . "$HOME/.dde_env"4         # Handling configuration migration issues5         if [ -n "$QT_SCALE_FACTOR" ]; then6             unset QT_SCALE_FACTOR7             unset QT_SCREEN_SCALE_FACTORS8             unset QT_AUTO_SCREEN_SCALE_FACTOR9             unset QT_FONT_DPI10             export STARTDDE_MIGRATE_SCALE_FACTOR=111         fi12     elif [ -f "$HOME/.pam_environment" -a -n "$QT_SCALE_FACTOR" ]; then13         # Handling configuration migration issues for earlier version14         unset QT_SCALE_FACTOR15         export STARTDDE_MIGRATE_SCALE_FACTOR=116     fi17 fi

小结:startx 的默认启动过程为: startx 调用并将系统文件 /etc/X11/xinit/xinitrc 和 /etc/X11/xinit/xserverrc 作为参数传给 xinit , xinit 就会先执行系统文件 /etc/X11/xinit/xserverrc 以启动 X Server ,然后执行 /etc/X11/xinit/xinitrc ,而 xinitrc 则会执行脚本 /etc/X11/Xsession ,而 Xsession 则会按顺序调用执行 /etc/X11/Xsession.d 目录下的文件,从而最终调用了 gnome-session 这个用于 启动 GNOME 桌面环境的程序

refer to

  • https://www.computerhope.com/unix/startx.htm
  • http://cn.linux.vbird.org/linux_basic/0590xwindow.php
  • https://wiki.archlinux.org/index.php/Xinit_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

http://chatgpt.dhexx.cn/article/Kb3mj4is.shtml

相关文章

CentOS 7输入startx无法启动图形化界面

【PS:最终解决方案见最后面】 【问题背景】 前两天在学习linux虚拟化的时候, 发现虚拟机磁盘空间不足, 由于当初分区的时候不是用lvm来分区的, 导致无法扩容, 所以只能新建了一台虚拟机来学习. 然而在新建完成后, 按照之前老师教的一系列优化手段, 将这台手段优化到…

6.1、startx命令怎么不能进入图形界面

命令行界面输入startx命令怎么不能进入图形界面^ ... [复制链接] 发表于 2010-1-29 12:55 | 来自 51CTO网页 [只看他] 楼主 我在虚拟机(vmware)上新安装的red hat linux 9.0在命令行界面输入startx命令怎么不能进入图形界面??&…

Linux常用命令——startx命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) startx 用来启动X Window 补充说明 startx命令用来启动X Window,实际上启动X Window的程序为xinit。 语法 startx(参数)参数 客户端及选项:X客户端及选项;服务器及选项&a…

startx命令详解

startx命令来自于英文词组”start X-windows“的缩写,其功能是用于启动X-Windows系统。X-Windows System也被称为X或X11,中文译为X窗口系统,主要工作就是以图形方式显示软件窗口的系统,现在的GNOME和KDE桌面环境都是以X窗口系统为…

用gcc编译C++文件

我们误以为gcc只能用来编译C文件&#xff0c;这是不对的。 gcc也可以编译C文件&#xff0c;只是gcc不能自动联接C程序使用的库&#xff0c;即链接过程我们不能用gcc 而g实际上在编译C文件时也是使用gcc编译器&#xff0c;在链接时才使用g 例子1&#xff1a; #include <st…

gcc编译c++文件

gcc是编译c语言的&#xff0c;默认情况下&#xff0c;如果直接编译c程序&#xff0c;会报错&#xff1a; [rootserver demo2]# ls hello.cpp [rootserver demo2]# cat hello.cpp #include <iostream> using namespace std; int main(){ cout<<"hello,c&qu…

C++:GCC编译:GCC编译C++程序分步流程

C或者C程序从源代码生成可执行程序的过程&#xff0c;需要经历4个过程分别是&#xff1a;预处理&#xff0c;编译&#xff0c;汇编&#xff0c;链接。但考虑实际使用过程中&#xff0c;用户可能并不关心程序的执行结果&#xff0c;只是想快速得到最终的可执行程序&#xff0c;因…

如何使用GCC编译器

目录 : GCC rules开始...预编译编译汇编连接另外两个重要选项调试小结站点链接 摘要: 要想读懂本文&#xff0c;你需要对C语言有基本的了解&#xff0c;本文将介绍如何使用gcc编译器。 首先&#xff0c;我们介绍如何在命令行方式下使用编译器编译简单的C源代码。 然后&#x…

gcc编译器入门教程

前言&#xff1a; GCC&#xff08;GNU Compiler Collection&#xff0c;GNU 编译器套装&#xff09;&#xff0c;是一套由 GNU 开发的编程语言编译器。GCC 原名为 GNU C 语言编译器&#xff0c;因为它原本只能处理 C语言。GCC 快速演进&#xff0c;变得可处理 C、Fortran、Pas…

Centos7安装并使用gcc编译器

一.安装gcc编译器 1.使用yum安装gcc&#xff08;需要获取管理员权限&#xff09; su root //进入管理员命令 yum -y install gcc gcc-c kernel-devel //安装gcc、c编译器以及内核文件 上图表示已…

gcc编译的四个过程

gcc是什么&#xff1f; GNU编译器套件&#xff08;GNU Compiler Collection&#xff09;包括C、C、Objective-C、Fortran、Java、Ada和Go语言的前端&#xff0c;也包括了这些语言的库&#xff08;如libstdc、libgcj等等&#xff09;。GCC的初衷是为GNU操作系统专门编写的一款编…

如何用gcc编译C代码

如何用gcc编译C代码 1、编写 hello word 的两种方法——现成编译器 这个方法大家都经常用&#xff0c;比如DEVCpp&#xff0c;Visual Studio 2017&#xff0c;Visual C 6.0等。 简单的输出“hello world”程序如下&#xff1a; #include <stdio.h>int main() {printf…

Linux gcc编译命令

编写一个C程序 1.用文本文件编写代码 用 touch 命令&#xff1a;“touch 文件名” 可以创建一个文件&#xff08;比如 touch hello.c&#xff09;&#xff0c;如下图&#xff1a; 在命令行输入 touch hello.c &#xff0c;就在文件夹中创建了一个hello.c文件&#xff0c;打开…

GCC编译器安装与下载

GCC介绍&#xff1a;是由GNU开发的支持C/C的跨平台编译器&#xff0c;在Windows上可以选择安装Cygwin或者 MinGW-w64,现在选择MinGW-w64来安装. 官网&#xff1a;MinGW-w64 下载地址&#xff1a;MinGW-w64 - for 32 and 64 bit Windows - Browse /ming…

gcc编译器

1 gcc编译器简介 gcc 是 Linux 平台下最常用的编译程序,它是Linux 平台编译器的事实标准。同时,在 Linux 平台下的嵌入式开发领域,gcc也是用得最普遍的一种编译器。gcc 之所以被广泛采用,是因为它能支持各种不同的目标体系结构。例如,它既支持基于宿主的开发(简单讲就是要为某…

【GCC】gcc编译器的使用

gcc编译器的使用 一、gcc编译过程&#xff08;精简&#xff09;1.gcc使用示例&#xff1a;2.执行“gcc -o hello hello.c -v”时&#xff0c;可以查看到这些步骤&#xff1a;3.可以手工执行以下命令体验一下&#xff1a; 二、gcc常用编译选项三、怎么编译多个文件四、制作、使用…

gcc编译过程

一、总体概述 GCC的编译流程分为四个步骤&#xff1a; 1、预处理&#xff08;Pre-Processing&#xff09; 2、编译&#xff08;Compiling&#xff09; 3、汇编 (Assembliang) 4、链接&#xff08;Linking&#xff09; 二、解释步骤 XXX为源文件 YY为生成的文件 1、预处理&am…

【Linux】gcc编译器

目录 一、什么是编译器 二、编译的过程 1.预处理 2.编译 3.汇编 4.链接 三、实际操作实例 四、总结 一、什么是编译器 简单讲&#xff0c;编译器就是将一种语言转化为另一种语言的程序&#xff0c;通常是将高级语言转化为低级语言。一个现代编译器的主要工工作流程&…

Linux下gcc编译器的安装与使用

GCC&#xff08;GNU Compiler Collection&#xff09;是由GNU开发的编程语言译器。GNU编译器套件包括C、C、 Objective-C、 Fortran、Java、Ada和Go语言前端&#xff0c;也包括了这些语言的库。在Linux上进行开发离不开GCC&#xff0c;本文将给出gcc的安装和基本使用方法。 目…

GCC编译器的安装教程(Windows环境)

GCC编译器的安装教程&#xff08;Windows环境&#xff09; 你好&#xff01;GCC 编译器是 Linux 系统下最常用的 C/C 编译器&#xff0c;大部分 Linux 发行版中都会默认安装。GCC 编译器通常以gcc命令的形式在终端&#xff08;Shell&#xff09;中使用.对于要学习Linux的朋友来…