由于每次启动桌面环境,都需要重复几个步骤,因此可以写一个启动脚本来简化启动步骤.
编写自定义usr/bin脚本
1 2 3
| cd $PATH #Termux的PATH环境变量默认只包含/data/data/com.termux/files/usr/bin/这一个值,因此可以使用环境变量代替路径名快速导航过去 nano startchrootvnc
|
输入以下内容并保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #!/bin/bash # 声明使用bash作为脚本解释器
killall -9 termux-x11 Xwayland virgl_test_server_android termux-wake-lock # 终止所有相关的旧进程 # 以下进程可能是之前运行残留的,为确保新的启动不受影响,强制终止它们 # termux-x11:Termux环境下X11相关进程 # Xwayland:用于在Wayland上运行X11客户端的兼容层进程 # pulseaudio:音频服务器进程 # virgl_test_server_android:可能与Android虚拟图形测试服务器相关的进程 # termux-wake-lock:可能用于保持设备唤醒状态的Termux相关进程
#am start --user 0 -n com.termux.x11/com.termux.x11.MainActivity # 启动Termux X11(此am start命令被注释,未启用) # am start是Android的Activity Manager命令,用于启动Android应用组件 # --user 0指定用户ID为0 # -n com.termux.x11/com.termux.x11.MainActivity指定要启动的应用包名和Activity名
sudo busybox mount --bind $PREFIX/tmp /data/SubSystem/chrootDebian/tmp # 将Termux的临时目录挂载到Debian chroot环境的临时目录 # sudo用于获取超级用户权限,因为挂载操作通常需要root权限 # busybox是一个集成多种Unix工具的软件,在Termux环境中常用 # mount --bind用于将一个目录绑定挂载到另一个目录 # $PREFIX/tmp是Termux的临时目录,$PREFIX通常是Termux的安装前缀 # /data/SubSystem/chrootDebian/tmp是Debian chroot环境中的临时目录 # 这样做可使Debian chroot环境访问Termux的临时目录,便于数据共享
XDG_RUNTIME_DIR=${TMPDIR} termux-x11 :0 -ac & # 设置XDG_RUNTIME_DIR环境变量为系统临时目录$TMPDIR # 许多基于XDG规范的应用程序使用XDG_RUNTIME_DIR存储运行时数据 # termux-x11启动Termux环境下的X11服务器 # :0指定X11服务器的显示设备编号为0,通常代表第一个显示设备 # -ac选项禁用访问控制,允许任何客户端连接到X11服务器 # &符号将该命令放在后台运行,使脚本继续执行后续命令
sleep 3 # 等待3秒,给X11服务器足够时间启动和初始化 # 确保后续依赖X11服务器的操作能正常进行
pulseaudio --start --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" --exit-idle-time=-1 # 启动Termux的PulseAudio音频服务器 # --start启动PulseAudio服务器 # --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1"加载TCP协议模块 # 并配置该模块允许来自本地环回地址127.0.0.1的匿名连接 # --exit-idle-time=-1使服务器永远不会因空闲而退出
pacmd load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1 # 使用PulseAudio的命令行管理工具pacmd再次加载TCP协议模块 # 并设置相同的访问控制参数,确保配置生效
#virgl_test_server_android & # 启动Virgl服务器(此命令被注释,未启用) # virgl_test_server_android可能是用于Android的虚拟图形测试服务器程序 # &符号将其放在后台运行
su -c "sh /data/SubSystem/start_debian_vnc_1400_830.sh" # 以超级用户身份执行Debian VNC启动脚本 # su用于切换用户,不加用户名默认切换到root # -c选项表示切换用户后执行一个命令 # sh /data/SubSystem/start_debian_vnc_1400_830.sh指定要执行的脚本路径 # 此脚本用于在chroot环境下启动Debian系统,并配置和启动VNC服务
|
接下来编写 start_debian_vnc_1400_830.sh 脚本:
为什么要另外写一个start_debian_vnc_1400_830.sh 脚本? 因为以上脚本内容执行权限是普通用户,以下脚本需要用root执行.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #!/bin/sh # 声明使用POSIX兼容的sh shell来执行脚本
DEBIANPATH="/data/SubSystem/chrootDebian" # 定义Debian根文件系统的路径 # 后续操作将基于此路径对Debian环境进行配置和交互
busybox mount -o remount,dev,suid /data # 修复setuid相关问题 # 使用busybox的mount命令重新挂载/data分区 # -o remount选项表示重新挂载已挂载的文件系统 # dev选项重新启用设备节点的支持 # suid选项重新启用设置用户ID(set - user - ID)和设置组ID(set - group - ID)位 # 这一步确保后续在/data分区上的操作具有正确的权限设置
busybox mount --bind /dev $DEBIANPATH/dev # 将宿主机的关键目录绑定挂载到Debian根文件系统对应的目录 # 使Debian系统能够访问宿主机的设备、内核信息和进程信息 # 绑定挂载/dev目录,/dev包含设备文件,Debian需要通过它访问硬件设备
busybox mount --bind /sys $DEBIANPATH/sys # 绑定挂载/sys目录,/sys提供内核对象的层次结构信息,供Debian系统获取硬件和驱动相关信息
busybox mount --bind /proc $DEBIANPATH/proc # 绑定挂载/proc目录,/proc是虚拟文件系统,包含内核和进程的相关信息,Debian借此获取系统状态和进程信息
busybox mount -t devpts devpts $DEBIANPATH/dev/pts # 挂载devpts文件系统到Debian根文件系统的/dev/pts目录 # devpts用于管理伪终端(PTY),支持Debian系统中多终端会话的运行
mkdir $DEBIANPATH/dev/shm # 为Electron应用程序设置/dev/shm # /dev/shm常用于进程间共享内存,许多应用程序(包括Electron应用)用它提升性能 # 创建Debian根文件系统中的/dev/shm目录
busybox mount -t tmpfs -o size=256M tmpfs $DEBIANPATH/dev/shm # 使用busybox的mount命令挂载tmpfs文件系统到/dev/shm目录 # -t tmpfs指定文件系统类型为tmpfs,这是一种基于内存的文件系统 # -o size=256M设置tmpfs的大小为256MB
mkdir $DEBIANPATH/sdcard # 创建Debian根文件系统中的sdcard目录,用于挂载SD卡
busybox mount --bind /sdcard $DEBIANPATH/sdcard # 使用busybox的mount命令将宿主机的/sdcard目录绑定挂载到Debian根文件系统的sdcard目录 # 使Debian系统能够访问SD卡上的内容
busybox chroot $DEBIANPATH /bin/su - alin -c 'export DISPLAY=:1 && export PULSE_SERVER=127.0.0.1:4713 && dbus-launch --exit-with-session && tightvncserver :1 -geometry 1400x830' # 以用户alin的身份进入chroot环境,设置显示和音频服务器相关变量,启动dbus并启动xfce4桌面环境 # 设置DISPLAY环境变量为:1,指定X11显示服务器地址,后续图形化应用将使用此显示 # 设置PULSE_SERVER环境变量,指定PulseAudio音频服务器地址为本地环回地址127.0.0.1的端口4713 # 启动D-Bus会话总线,--exit-with-session选项表示当会话结束时退出D-Bus # 启动TightVNC服务器,监听显示号:1,设置分辨率为1400x830 # 使得可以通过网络远程访问Debian环境中的图形化桌面
|
使用 Ctrl+O触发保存,确定写入的文件名为 startchrootvnc按回车继续,然后使用 Ctrl+X退出文本编辑器
使用以下命令为脚本添加执行权限
chmod +x startchrootvnc
完成以上步骤即可随时使用 startchrootvnc 命令启动桌面环境