![如何在没有 root 权限的情况下安装 Awesome WM?](https://linux22.com/image/808290/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%A1%E6%9C%89%20root%20%E6%9D%83%E9%99%90%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%AE%89%E8%A3%85%20Awesome%20WM%EF%BC%9F.png)
我想安装惊人的窗口管理器。在我想要配置它的环境中,我没有 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
我现在有 awesome 的依赖项列表,所以我下载了它们全部。为此,我做了以下操作。
$ 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 ]
现在,我要安装依赖项。为此,我在主文件夹中设置了一个伪 dpkg 安装:
$ mkdir $HOME/root
$ mkdir -p $HOME/root/var/lib/dpkg/{triggers,updates}
$ touch $HOME/root/var/lib/dpkg/{available,status}
现在我尝试使用 dpkg 安装,但是无法安装:
$ dpkg --force-not-root --root=$HOME/root --recursive -i /tmp/x_debs
尝试设置软件包权限并运行 chroot 时失败。由于我在这台机器上拥有 root 访问权限,因此我以特权运行它:
$ sudo dpkg --root=$HOME/root --recursive -i /tmp/x_debs
然后我在里面安装了很多东西(即所有东西:依赖项和自己的 WM)$HOME/root
。特别是,在 中安装了 xcb-* 库$HOME/root/usr/lib
,在 中安装了 awesome 二进制文件$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 文件夹中的所有内容,将其粘贴到另一台机器上并运行它。还有其他方法(也许可以减少浪费的空间……)来做到这一点吗?
我怎样才能告诉 gdm exec awesome
无需 root 访问权限?
答案1
我还没有成功,但是就目前而言我已经设法获得了大部分成功。
通过在 fakeroot 环境中安装每个依赖项,系统会认为每个依赖项都是正确的。除了 Awesome 本身。
配置写得太差了,每个组件的路径都硬编码在每个配置文件中。等我有时间了,我会尝试用正则表达式解决这个问题,然后重新编译 Awesome。
如果其他人确实有解决方案,我希望了解并讨论它,也许将其标记为已接受。
答案2
创建一个名为 $HOME 的 shell 脚本.xsession
,该脚本执行启动会话所需的一切并在 GDM 登录屏幕上选择“用户定义会话”。