tmoe
tmoe copied to clipboard
chroot 的 kali-rolling-amd64 容器,无法切换至zsh,总是以bash启动
Are you using tmoe?
Yes
Are you rooted?
Yes
What is your desktop environment?
🦖 kde plasma
Describe the bug
在linux和wsl2环境下,安装kali-rolling-amd64的chroot容器,每次启动都会强制以bash作为shell,使用chsh修改并不能起作用(在/etc/passwd中可以看到默认shell已经是zsh了,使用neofetch也能看到默认shell是zsh)
测试用的系统:ubuntu,pop!_os,kubuntu,rocky linux,ubuntu wsl2
How to reproduce
No response
Expected behavior
No response
Screenshots
No response
Error Logs
No response
What is the container type?
No response
Configuration
container | value |
---|---|
distro | kali-rolling |
arch | amd64 |
host | value |
---|---|
os | kubuntu 21.10 |
arch | amd64 |
terminal | konsole(KDE) |
tmoe | latest |
Additional context
kali-rolling的chroot容器启动脚本有问题,默认以bash作为终端了
对于konsole:
konsole --> 设置 --> 编辑当前方案 --> 命令:
/bin/zsh
--> apply(应用)
对于tmoe:
切换登录shell
在 konsole 里输入
echo $SHELL
输出的结果是什么?
顺带一说, WSL2 支持自定义 rootfs 导入。 咱以后可能会适配这个功能,然后就不需要再装个容器了,直接再开个 WSL 就行了。
我尝试在tmoe里切换shell,在容器内使用chsh命令,使用全局env方式,均无法切换到zsh,依旧是bash。 顺带一提,在按照kali-linux-core或者更高的包之后,默认bash终端会变成kali的zsh,但是依旧无法切换到自己安装的zsh也不能使用自己的配置文件(在konsole终端上依旧显示为bash) 另外这里提wsl2仅仅是测试在其他系统和平台上是否存在相同的问题,我自己测试不论宿主是linux还是wsl2,只要是chroot都必定出这个问题,至于termux,我没有root设备没法测试chroot,proot环境下是正常的
在 konsole 里输入
echo $SHELL
输出的结果是什么?
/bin/bash 安装kali-linux-core包之后变成/bin/zsh(但是实际上只能用kali的zsh,无法使用自行安装的zsh。kali应该是替换了/bin/bash可执行文件的软链接)
对于开启了boot模式的 systemd-nspawn 容器来说,默认shell跟 /etc/passwd 有关。 对于 chroot,跟启动脚本有关,这个很简单。
咱之前写了自动判断的步骤,default_shell 有好几个。
当没有检测到0时,会自动fallback到1,当没有检测到1时,会fallback到2。
可能是检测出错了。
折衷的方法是改Entrypoint,不是改全局环境变量。
就是编辑 entrypoint 文件, 然后在最后一行里加入 exec /usr/bin/zsh
或 exec /usr/bin/zsh -l
不过咱不推荐这种方法,毕竟是 login shell,这样做不太好。
之前, kali 自带的zsh会覆盖掉用户自己配置的 .zshrc。 现在的话,不清楚呢! 我明天早上再来测试一下吧!
我自己的测试是kali的zsh包并不会覆盖.zshrc,安装kali-linux-core或者更高的合集包都会自动修改shell为/usr/bin/zsh 匪夷所思的是kali在chroot下的zsh并不会读取用户的.zshrc而是变成了内置的,无论怎么修改都无济于事 但是proot环境下就没有这种问题

普通用户可以读取自己的 .zshrc
对于systemd 容器无法切换默认shell的问题。
咱测试过了,用 boot模式就好了。
注: 如果不读取 .zshrc, 那就把 "ZDOTDIR" 变量的值设置为 "$HOME"
我给你出个教程吧!
-
更新
-
chroot/systemd
-
若当前不为systemd-mode, 则使用systemd mode. 注:标题栏下方会有提示信息。
4.每周构建
5.zsh(nogui)
6.kali
-
新建容器
-
输入自定义名称时,要输入英文/数字。刚刚发现汉字名称会出bug, 以后再来修复。
9.然后就是正常的安装
10.安装过程中,新建一个有sudo特权的普通用户。





- 选no, 然后按Ctrl+ ]]] (按住Ctrl, 再按三次 ] 退出)
12.回到该界面
-
boot模式
-
enable

- 回到容器菜单,启动kali

16.输入zsh,回车 再输入2

输入 chsh -s /usr/bin/zsh
按Ctrl+ ]]] 退出
-
重进容器,登录 momo 看看。
看看是不是zsh的界面。
执行
. <(curl -L l.tmoe.me/zsh)
虽然这个zsh管理器还能用,不过咱之后要重写它了。
我自己按照你前面的建议试了一下,发现用entrypoint加exec /usr/bin/zsh 是可以的,但是不能带 -l 参数(会导致容器卡死) 总之这个问题可能还是和入口点有关,并没有正确的使用用户shell(没有kali-linux-core就只能启动bash,有就启动kali自己的zsh,手动启动/usr/bin/zsh才能读取用户的.zshrc)