如何在没有 root 访问权限的情况下安装 Awesome WM?

ssi*_*ice 5 gnome gdm root awesome

我想安装Awesome窗口管理器。在我想配置它的环境中,我没有 root 访问权限。

我确实有一台可以成为 root 的机器(我在笔记本电脑中使用了虚拟机)。

我尝试了以下方法:

$ sudo apt-get install awesome
The following packages are about to be installed:
  awesome libev3 libid3tag0 libimlib2 liblua5.1-0 libxcb-icccm1 libxcb-image0
  libxcb-keysyms1 libxcb-property1 libxcb-randr0 libxcb-xinerama0
  libxcb-xtest0 libxdg-basedir1 menu rlwrap
Do you want to continue [Y/n]? n
Run Code Online (Sandbox Code Playgroud)

我现在有很棒的依赖项列表,所以我下载了它们。为此,我做了以下工作。

$ pkgs="awesome libev3 libid3tag0 libimlib2 liblua5.1-0 libxcb-icccm1 libxcb-image0
  libxcb-keysyms1 libxcb-property1 libxcb-randr0 libxcb-xinerama0
  libxcb-xtest0 libxdg-basedir1 menu rlwrap" # this is just for not writing it all ;)
$ sudo apt-get install --download-only $pkgs
....
$ mkdir -p /tmp/x_debs
$ for pkg in $pkgs; do cp /var/cache/apt/archives/$pkg* /tmp/x_debs/; done
[ copies all *.deb from my dependencies to /tmp/x_debs ]
Run Code Online (Sandbox Code Playgroud)

现在,我想安装依赖项。为此,我在我的主文件夹中设置了一个假的 dpkg 安装:

$ mkdir $HOME/root
$ mkdir -p $HOME/root/var/lib/dpkg/{triggers,updates}
$ touch $HOME/root/var/lib/dpkg/{available,status}
Run Code Online (Sandbox Code Playgroud)

现在我尝试用 dpkg 安装,但我不能:

$ dpkg --force-not-root --root=$HOME/root --recursive -i /tmp/x_debs
Run Code Online (Sandbox Code Playgroud)

尝试为软件包设置权限并运行 chroot 时失败。因为我在这台机器上有 root 访问权限,所以我以特权运行它:

$ sudo dpkg --root=$HOME/root --recursive -i /tmp/x_debs
Run Code Online (Sandbox Code Playgroud)

然后我在里面安装了很多东西(即所有东西:依赖项和自己的 WM)$HOME/root。特别是,xcb-* 库安装$HOME/root/usr/lib$HOME/root/usr/bin/awesome.

如果我尝试按原样执行 awesome,则会出现无法加载库的错误。这是正常的,因为它们不在 /usr/lib 中,也不在 /lib 中。所以我跑了export LD_LIBRARY_PATH=$HOME/root/usr/lib:$HOME/root/lib:${LD_LIBRARY_PATH},awesome尝试加载。

但是,我无法让 gdmawesome在 gnome 中运行或替换它。

我是这样做的,所以我可以复制 $HOME/root 文件夹中的所有内容,将其粘贴到另一台机器上并让它运行。有没有其他方法(可能会减少浪费的空间......)来做到这一点?

如何在exec awesome没有 root 访问权限的情况下告诉 gdm ?

ssi*_*ice 1

我还没有成功,但就目前而言,我已经取得了大部分成功。

通过在 fakeroot 环境中安装每个依赖项,系统认为每个依赖项都是正确的。除了《Awesome》本身。

配置写得非常糟糕,以至于每个组件的路径都硬编码在每个配置文件中。当我稍后有时间时,我会尝试“正则表达式”解决该问题并重新编译 Awesome。

如果其他人确实有我想知道并讨论的解决方案,也许可以将其标记为已接受。