如何在我自己的 Linux Buildroot 系统上安装 X11?

Aru*_*ngh 11 linux x11 package-management linux-kernel buildroot

我已经使用buildrootbusybox开发了我自己的小型 linux 文件系统。我使用linux-2.6.38.8内核根据需要为目标系统(X86)配置和交叉编译。现在文件系统已经构建,但它只有busybox shell,不支持GUI。它没有任何包管理器也是。现在我想在它上面启用 GUI。我检查了/etc但没有任何x11目录或x11.conf文件。它也不支持startx

How can I install x11(XFree86 or Xorg) on my system Explicitly.

I also want to install a package-manager for my system.
Run Code Online (Sandbox Code Playgroud)

如何做到这一点?

Cir*_*郝海东 8

Ubuntu 16.04 主机,Buildroot 2017.02

在此处输入图片说明

当前的 Buildroot 有一个 X11 包,它让我们的事情变得“容易”:https : //github.com/buildroot/buildroot/tree/2016.05/package/x11r7

这个 repo 用一个命令为你构建整个系统:https : //github.com/cirosantilli/linux-kernel-module-cheat/tree/b134f3958884ce1fce2dd9d31d19ab0c0fbe9089#x11

或者,这是一个预先准备好的.config文件:https : //github.com/cirosantilli/buildroot-configs/blob/44b45b5c7f68e44abcda360a2b980f8301901a9a/qemu_x86_64_x11_defconfig

这是我设法逃脱的最小 X11 特定配置是:

BR2_PACKAGE_XAPP_TWM=y
BR2_PACKAGE_XAPP_XCALC=y
BR2_PACKAGE_XAPP_XCLOCK=y
BR2_PACKAGE_XAPP_XEYES=y
BR2_PACKAGE_XAPP_XINIT=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_KEYBOARD=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_MOUSE=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_CIRRUS=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_FBDEV=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_VESA=y
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_XSERVER_XORG_SERVER=y
BR2_PACKAGE_XTERM=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_TOOLCHAIN_BUILDROOT_WCHAR=y
BR2_USE_WCHAR=y
Run Code Online (Sandbox Code Playgroud)

以下是将这些选项添加到现有配置的方法.config是否可以将配置片段与 Buildroot 的 .config 一起使用?| 堆栈溢出

我是如何找到选项的:make menuconfig,用 搜索选项名称/,然后dependesxeyes.

不幸的是,你仍然需要知道你在做什么,主要是因为两个不同的包实现了一个接口(例如 X.Org Modular 和 KDrive,它们都实现了一个 X11 服务器),并且默认情况下没有选择。

这篇文章很有帮助使用 Buildroot 构建一个小型 X.Org Linux 系统 | agentoss.wordpress.com

然后就是通常的:

make BR2_JLEVEL=$(nproc)
qemu-system-x86_64 \
    -enable-kvm \
    -M pc \
    -m 512 \
    -kernel output/images/bzImage \
    -drive file=output/images/rootfs.ext2,if=virtio,format=raw \
    -append root=/dev/vda \
    -net nic,model=virtio \
    -net user
Run Code Online (Sandbox Code Playgroud)

从 QEMU 内部:

root
startx
Run Code Online (Sandbox Code Playgroud)

图片大小:28M。

结果

一个古老的X11系统!

它的行为就像在这个视频中一样:https : //upload.wikimedia.org/wikipedia/commons/transcoded/5/52/TWM_without_configuration.ogv/TWM_without_configuration.ogv.480p.webm

特别是,这个古老的窗口管理器在菜单栏上没有 X 关闭按钮:您必须:

  • 点击桌面
  • 从菜单中选择“杀死”
  • 选择要杀死的窗口

startx然后传递/etc/X11/xinit/xinitrcxinit,它在启动 GUI 后调用它。默认xinitrc包含:

twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login
Run Code Online (Sandbox Code Playgroud)

这将启动我们的窗口管理器twm(尝试为 Buildroot 具有包的其他管理器之一更改它),以及我们在屏幕上看到的程序。TODO 那exec xterm部分是什么?为什么exec

x11vnc

在此处输入图片说明

当您从模拟器转向真实设备时,x11vnc您无需购买显示器:它会在您的主机中将屏幕作为窗口打开,甚至可以向设备发送鼠标点击。

x11vnc在 Buildroot 上启用包并重建。

要首先在 QEMU 上进行测试,请使用选项(另请参阅如何使用 QEMU 从主机到来宾通过 SSH 进行 SSH?| Unix & Linux Stack Exchange ):

-net nic,model=virtio \
-net user,hostfwd=tcp::5901-:5900
Run Code Online (Sandbox Code Playgroud)

然后在来宾上startx运行:

x11vnc
Run Code Online (Sandbox Code Playgroud)

然后回到主机上:

sudo apt-get install vinagre
vinagre localhost::5901
Run Code Online (Sandbox Code Playgroud)

结果:

  • 左边,QEMU 运行 X11、x11vnc 和 glmark2
  • 在右边,主机上的 vinagre,显示完全相同的东西
  • 我可以单击并与其中任何一个交互,另一个会立即更新

另请参阅:如何在没有显示器的情况下设置 Raspberry Pi?| 树莓派堆栈交换

显示管理器(尝试失败)

在此处输入图片说明

如果您想完全忘记终端,还可以启用:

  • 目标包
    • 图形库和应用程序
      • X.Org X Window System: 都点击y然后enter进入
        • X11R7 Applications
          • xconsolexdm默认运行)
          • xdm

现在,当您启动 QEMU 时,您会看到一个类似于“现代”发行版的图形登录屏幕:

待办事项:无法登录。用户名root/空密码在另一个安装了所有 X11 软件包的测试中对我有用。xdm将日志放在 下/var/log/xdm.log,您可以获得一个 TTY shell 来检查它:How can I ctrl-alt-f# to get to a TTY in a QEMU session? | 询问 Ubuntu

启动显示管理器的调用链是:

  • /init (由 BusyBox 提供)
  • /etc/inittab 线 ::sysinit:/etc/init.d/rcS
  • /etc/init.d/rcS
  • /etc/init.d/S99xdm
  • /usr/bin/xdm


Ren*_*nan 6

您必须自己构建 X。首先阅读这个 X.Org wiki 条目

本指南适用于希望从源代码构建 X Window 系统的开发人员。如果您感兴趣的领域仅限于单个包,例如驱动程序或应用程序,请首先与您的操作系统联系以了解开发工具。

至于包管理器,您需要选择一个,满足所有需要的依赖项,然后为其打包(仅仅因为您选择了 dpkg/rpm/whatever,并不意味着 deb/RPM/... 包将神奇地与你的发行版)。来自 Arch Linux 的 Pacman 看起来很容易构建。