Skip to content

Commit 93a1916

Browse files
author
Yuchen Deng
committed
Merge branch 'master' into stable
2 parents 7bce104 + e8a3c4d commit 93a1916

File tree

10 files changed

+322
-65
lines changed

10 files changed

+322
-65
lines changed

README.md

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,20 @@
1818
2. 执行:./nspawn-debian.sh 安装 Debian 10
1919
3. 或者:./nspawn-deepin.sh 安装 Deepin 20.2.3
2020
4. 也可以:sudo ./nspawn-debian.sh 这种方式
21-
5. 安装应用,请终端执行:debian-install-qq 或者 deepin-install-qq
22-
6. 更多应用安装,请查看:ls /bin/*-install-*
23-
7. 启动器中查找QQ或者微信启动,也可以终端启动,例如:debian-qq
21+
5. 也可以同时安装两个容器:install.sh
22+
6. 安装应用,请终端执行:debian-install-qq 或者 deepin-install-qq
23+
7. 更多应用安装,请查看:ls /bin/*-install-*
24+
8. 启动器中查找QQ或者微信启动,也可以终端启动,例如:debian-qq
25+
9. 卸载软件请先安装终端:debian-install-terminal,之后进终端命令卸载
2426

2527
#### 多系统配置
2628
1. 自动安装的容器支持多系统共享,请提前做好~/.machines的软链接
27-
2. 管理员权限执行:debian-config.sh 或者 deepin-config.sh
28-
3. 如果同时配置两个容器,可以终端管理员权限执行:config.sh
29-
4. 也可以同时安装两个容器:install.sh
29+
2. 管理员权限执行:sudo ./debian-config.sh 或者 sudo ./deepin-config.sh
30+
3. 如果同时配置两个容器,可以终端管理员权限执行:sudo ./config.sh
31+
32+
#### 高级用法
33+
1. 如果稳定性不佳,请同时禁用宿主机和容器的MIT-SHM扩展:sudo DISABLE_HOST_MITSHM=1 ./nspawn-config.sh
34+
2. 注意:禁用宿主机MIT-SHM后,需要重启电脑才生效!
3035

3136
#### 参与贡献
3237

debian-config.sh

Lines changed: 55 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ fi
1212
source `dirname ${BASH_SOURCE[0]}`/nspawn-polkit.sh
1313

1414

15+
# 必备软件包
16+
[ -f /bin/apt ] && [ ! -f /bin/machinectl ] && apt install -y systemd-container
17+
[ -f /bin/dnf ] && [ ! -f /bin/machinectl ] && dnf install -y systemd-container
18+
if [[ `loginctl show-session $(loginctl | grep $SUDO_USER |awk '{print $1}') -p Type` != *wayland* ]]; then
19+
[ -f /bin/pacman ] && [ ! -f /bin/xhost ] && pacman -S xorg-xhost --noconfirm --needed
20+
[ -f /bin/apt ] && [ ! -f /bin/xhost ] && apt install -y x11-xserver-utils
21+
[ -f /bin/dnf ] && [ ! -f /bin/xhost ] && dnf install -y xhost
22+
fi
23+
24+
1525
# 初始化配置
1626
ln -sf /home/$SUDO_USER/.machines/debian /var/lib/machines
1727
[ -f "/bin/debian-distro-info" ] && mv /bin/debian-distro-info /bin/bak-debian-distro-info
@@ -26,15 +36,7 @@ source `dirname ${BASH_SOURCE[0]}`/user-dirs.sh
2636
# 配置容器
2737
[[ $(machinectl list) =~ debian ]] && machinectl stop debian
2838
mkdir -p /home/share && chmod 777 /home/share
29-
if [[ `loginctl show-session $(loginctl | grep $SUDO_USER |awk '{print $1}') -p Type` != *wayland* ]]; then
30-
[[ ! -f /etc/X11/xorg.conf || ! $(cat /etc/X11/xorg.conf | grep MIT-SHM) ]] && echo -e 'Section "Extensions"
31-
Option "MIT-SHM" "Disable"
32-
EndSection' >> /etc/X11/xorg.conf
33-
fi
3439
cat > /var/lib/machines/debian/config.sh <<EOF
35-
echo -e 'Section "Extensions"
36-
Option "MIT-SHM" "Disable"
37-
EndSection' > /etc/X11/xorg.conf
3840
[[ ! \$(cat /etc/hosts | grep \$HOSTNAME) ]] && echo "127.0.0.1 \$HOSTNAME" >> /etc/hosts
3941
/bin/sed -i 's/# en_US.UTF-8/en_US.UTF-8/g' /etc/locale.gen
4042
/bin/sed -i 's/# zh_CN.UTF-8/zh_CN.UTF-8/g' /etc/locale.gen
@@ -56,6 +58,10 @@ EOF
5658
chroot /var/lib/machines/debian/ /bin/bash /config.sh
5759

5860

61+
# 禁用MIT-SHM
62+
source `dirname ${BASH_SOURCE[0]}`/xnoshm.sh debian
63+
64+
5965
# 配置启动环境变量
6066
DESKTOP_ENVIRONMENT=
6167
X11_BIND_AND_CONFIG=
@@ -79,9 +85,7 @@ cat > /bin/debian-start <<EOF
7985
$(echo "$DESKTOP_ENVIRONMENT")
8086
export XDG_RUNTIME_DIR=/run/user/\$UID
8187
export PULSE_SERVER=unix:\$XDG_RUNTIME_DIR/pulse/native
82-
export QT_X11_NO_MITSHM=1
83-
export _X11_NO_MITSHM=1
84-
export _MITSHM=0
88+
$(echo "$DISABLE_MITSHM")
8589
dex \$@
8690
EOF
8791

@@ -112,10 +116,11 @@ cat > /etc/systemd/system/systemd-nspawn@debian.service.d/override.conf <<EOF
112116
[Service]
113117
ExecStartPost=systemd-nspawn-debug
114118
ExecStart=
115-
ExecStart=systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i --drop-capability=CAP_IPC_OWNER --setenv=LANGUAGE=zh_CN:zh --property=DeviceAllow='/dev/dri rw' --property=DeviceAllow='char-drm rwm' --property=DeviceAllow='char-input r'
119+
ExecStart=systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i --setenv=LANGUAGE=zh_CN:zh --property=DeviceAllow='/dev/dri rw' --property=DeviceAllow='char-drm rwm' --property=DeviceAllow='/dev/shm rw' --property=DeviceAllow='char-input r'
116120
# GPU
117121
DeviceAllow=/dev/dri rw
118122
DeviceAllow=char-drm rwm
123+
DeviceAllow=/dev/shm rw
119124
# Controller
120125
DeviceAllow=char-input r
121126
EOF
@@ -133,11 +138,10 @@ NVIDIA_BIND=$(bash -c 'echo -e "
133138
Bind = /dev/nvidia0
134139
Bind = /dev/nvidiactl
135140
# OpenCL 与 CUDA
136-
Bind = /dev/nvidia-uvm
137-
Bind = /dev/nvidia-uvm-tools
141+
$([[ $(lsmod | grep nvidia_uvm) ]] && echo Bind = /dev/nvidia-uvm)
142+
$([[ $(lsmod | grep nvidia_uvm) ]] && echo Bind = /dev/nvidia-uvm-tools)
138143
# Vulkan
139144
Bind = /dev/nvidia-modeset
140-
Bind = /dev/shm
141145
"')
142146

143147

@@ -148,11 +152,10 @@ cat >> /etc/systemd/system/systemd-nspawn@debian.service.d/override.conf <<EOF
148152
DeviceAllow=/dev/nvidiactl rw
149153
DeviceAllow=/dev/nvidia0 rw
150154
# OpenCL 需要
151-
DeviceAllow=/dev/nvidia-uvm rw
152-
DeviceAllow=/dev/nvidia-uvm-tools rw
155+
$([[ $(lsmod | grep nvidia_uvm) ]] && echo DeviceAllow=/dev/nvidia-uvm rw)
156+
$([[ $(lsmod | grep nvidia_uvm) ]] && echo DeviceAllow=/dev/nvidia-uvm-tools rw)
153157
# Vulkan 需要
154158
DeviceAllow=/dev/nvidia-modeset rw
155-
DeviceAllow=/dev/shm rw
156159
EOF
157160
fi
158161

@@ -171,6 +174,7 @@ BindReadOnly = /tmp/.X11-unix
171174
172175
# GPU
173176
Bind = /dev/dri
177+
Bind = /dev/shm
174178
$(echo "$NVIDIA_BIND")
175179
# Controller
176180
Bind = /dev/input
@@ -240,7 +244,7 @@ $(echo "$X11_BIND_AND_CONFIG")
240244
# 启动环境变量
241245
RUN_ENVIRONMENT="LANG=\$LANG DISPLAY=\$DISPLAY GTK_IM_MODULE=\$GTK_IM_MODULE XMODIFIERS=\$XMODIFIERS QT_IM_MODULE=\$QT_IM_MODULE"
242246
if [[ \$(loginctl show-session \$(loginctl | grep \$USER |awk '{print \$1}') -p Type) == *wayland* ]]; then
243-
RUN_ENVIRONMENT="\$RUN_ENVIRONMENT WAYLAND_DISPLAY=\$WAYLAND_DISPLAY XAUTHORITY=\$XAUTHORITY"
247+
RUN_ENVIRONMENT="\$RUN_ENVIRONMENT XAUTHORITY=\$XAUTHORITY"
244248
fi
245249
EOF
246250

@@ -250,7 +254,11 @@ cat /bin/debian-config
250254

251255
# 查询应用
252256
cat > /bin/debian-query <<EOF
253-
machinectl shell debian /bin/bash -c "ls /usr/share/applications"
257+
machinectl shell debian /bin/su - u\$UID -c "ls /usr/share/applications \
258+
&& find /opt -name "*.desktop" \
259+
&& echo && echo query inode/directory && xdg-mime query default inode/directory \
260+
&& echo && echo query video/mp4 && xdg-mime query default video/mp4 \
261+
&& echo && echo query audio/flac && xdg-mime query default audio/flac"
254262
EOF
255263

256264
chmod 755 /bin/debian-query
@@ -386,7 +394,8 @@ chmod 755 /bin/debian-ecloud
386394

387395
# 安装文件管理器
388396
cat > /bin/debian-install-thunar <<EOF
389-
machinectl shell debian /usr/bin/bash -c "apt update && apt install -y thunar catfish dbus-x11 --no-install-recommends && apt autopurge -y"
397+
machinectl shell debian /usr/bin/bash -c "apt update && apt install -y thunar catfish dbus-x11 xdg-utils --no-install-recommends && apt autopurge -y"
398+
machinectl shell debian /bin/su - u\$UID -c "xdg-mime default Thunar.desktop inode/directory"
390399
EOF
391400

392401
chmod 755 /bin/debian-install-thunar
@@ -399,3 +408,28 @@ machinectl shell debian /bin/su - u\$UID -c "\$RUN_ENVIRONMENT start /usr/share/
399408
EOF
400409

401410
chmod 755 /bin/debian-thunar
411+
412+
413+
414+
# 安装MPV
415+
cat > /bin/debian-install-mpv <<EOF
416+
machinectl shell debian /usr/bin/bash -c "apt update && apt install -y mpv --no-install-recommends && apt autopurge -y"
417+
EOF
418+
419+
chmod 755 /bin/debian-install-mpv
420+
421+
# 启动MPV
422+
cat > /bin/debian-mpv <<EOF
423+
#!/bin/bash
424+
source /bin/debian-config
425+
machinectl shell debian /bin/su - u\$UID -c "\$RUN_ENVIRONMENT start /usr/share/applications/mpv.desktop"
426+
EOF
427+
428+
chmod 755 /bin/debian-mpv
429+
430+
431+
432+
# 添加启动器
433+
machinectl start debian && sleep 0.3
434+
[[ $(debian-query | grep com.qq.im.deepin.desktop) ]] && [ ! -f /usr/share/applications/deepin-qq.desktop ] && debian-install-qq
435+
[[ $(debian-query | grep com.qq.weixin.deepin.desktop) ]] && [ ! -f /usr/share/applications/deepin-weixin.desktop ] && debian-install-weixin

deepin-config.sh

Lines changed: 57 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,18 @@ fi
1212
source `dirname ${BASH_SOURCE[0]}`/nspawn-polkit.sh
1313

1414

15+
# 必备软件包
16+
[ -f /bin/apt ] && [ ! -f /bin/machinectl ] && apt install -y systemd-container
17+
[ -f /bin/dnf ] && [ ! -f /bin/machinectl ] && dnf install -y systemd-container
18+
if [[ `loginctl show-session $(loginctl | grep $SUDO_USER |awk '{print $1}') -p Type` != *wayland* ]]; then
19+
[ -f /bin/pacman ] && [ ! -f /bin/xhost ] && pacman -S xorg-xhost --noconfirm --needed
20+
[ -f /bin/apt ] && [ ! -f /bin/xhost ] && apt install -y x11-xserver-utils
21+
[ -f /bin/dnf ] && [ ! -f /bin/xhost ] && dnf install -y xhost
22+
fi
23+
24+
1525
# 初始化配置
26+
[ -f /bin/pacman ] && [ ! -f /bin/xhost ] && pacman -S xorg-xhost --noconfirm --needed
1627
ln -sf /home/$SUDO_USER/.machines/deepin /var/lib/machines
1728
rm -f /bin/deepin-*
1829

@@ -24,15 +35,7 @@ source `dirname ${BASH_SOURCE[0]}`/user-dirs.sh
2435
# 配置容器
2536
[[ $(machinectl list) =~ deepin ]] && machinectl stop deepin
2637
mkdir -p /home/share && chmod 777 /home/share
27-
if [[ `loginctl show-session $(loginctl | grep $SUDO_USER |awk '{print $1}') -p Type` != *wayland* ]]; then
28-
[[ ! -f /etc/X11/xorg.conf || ! $(cat /etc/X11/xorg.conf | grep MIT-SHM) ]] && echo -e 'Section "Extensions"
29-
Option "MIT-SHM" "Disable"
30-
EndSection' >> /etc/X11/xorg.conf
31-
fi
3238
cat > /var/lib/machines/deepin/config.sh <<EOF
33-
echo -e 'Section "Extensions"
34-
Option "MIT-SHM" "Disable"
35-
EndSection' > /etc/X11/xorg.conf
3639
[[ ! \$(cat /etc/hosts | grep \$HOSTNAME) ]] && echo "127.0.0.1 \$HOSTNAME" >> /etc/hosts
3740
/bin/sed -i 's/# en_US.UTF-8/en_US.UTF-8/g' /etc/locale.gen
3841
/bin/sed -i 's/# zh_CN.UTF-8/zh_CN.UTF-8/g' /etc/locale.gen
@@ -55,6 +58,10 @@ EOF
5558
chroot /var/lib/machines/deepin/ /bin/bash /config.sh
5659

5760

61+
# 禁用MIT-SHM
62+
source `dirname ${BASH_SOURCE[0]}`/xnoshm.sh deepin
63+
64+
5865
# 配置启动环境变量
5966
DESKTOP_ENVIRONMENT=
6067
X11_BIND_AND_CONFIG=
@@ -78,9 +85,7 @@ cat > /bin/deepin-start <<EOF
7885
$(echo "$DESKTOP_ENVIRONMENT")
7986
export XDG_RUNTIME_DIR=/run/user/\$UID
8087
export PULSE_SERVER=unix:\$XDG_RUNTIME_DIR/pulse/native
81-
export QT_X11_NO_MITSHM=1
82-
export _X11_NO_MITSHM=1
83-
export _MITSHM=0
88+
$(echo "$DISABLE_MITSHM")
8489
dex \$@
8590
EOF
8691

@@ -111,10 +116,11 @@ cat > /etc/systemd/system/systemd-nspawn@deepin.service.d/override.conf <<EOF
111116
[Service]
112117
ExecStartPost=systemd-nspawn-debug
113118
ExecStart=
114-
ExecStart=systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i --drop-capability=CAP_IPC_OWNER --setenv=LANGUAGE=zh_CN:zh --property=DeviceAllow='/dev/dri rw' --property=DeviceAllow='char-drm rwm' --property=DeviceAllow='char-input r'
119+
ExecStart=systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i --setenv=LANGUAGE=zh_CN:zh --property=DeviceAllow='/dev/dri rw' --property=DeviceAllow='char-drm rwm' --property=DeviceAllow='/dev/shm rw' --property=DeviceAllow='char-input r'
115120
# GPU
116121
DeviceAllow=/dev/dri rw
117122
DeviceAllow=char-drm rwm
123+
DeviceAllow=/dev/shm rw
118124
# Controller
119125
DeviceAllow=char-input r
120126
EOF
@@ -132,11 +138,10 @@ NVIDIA_BIND=$(bash -c 'echo -e "
132138
Bind = /dev/nvidia0
133139
Bind = /dev/nvidiactl
134140
# OpenCL 与 CUDA
135-
Bind = /dev/nvidia-uvm
136-
Bind = /dev/nvidia-uvm-tools
141+
$([[ $(lsmod | grep nvidia_uvm) ]] && echo Bind = /dev/nvidia-uvm)
142+
$([[ $(lsmod | grep nvidia_uvm) ]] && echo Bind = /dev/nvidia-uvm-tools)
137143
# Vulkan
138144
Bind = /dev/nvidia-modeset
139-
Bind = /dev/shm
140145
"')
141146

142147

@@ -147,11 +152,10 @@ cat >> /etc/systemd/system/systemd-nspawn@deepin.service.d/override.conf <<EOF
147152
DeviceAllow=/dev/nvidiactl rw
148153
DeviceAllow=/dev/nvidia0 rw
149154
# OpenCL 需要
150-
DeviceAllow=/dev/nvidia-uvm rw
151-
DeviceAllow=/dev/nvidia-uvm-tools rw
155+
$([[ $(lsmod | grep nvidia_uvm) ]] && echo DeviceAllow=/dev/nvidia-uvm rw)
156+
$([[ $(lsmod | grep nvidia_uvm) ]] && echo DeviceAllow=/dev/nvidia-uvm-tools rw)
152157
# Vulkan 需要
153158
DeviceAllow=/dev/nvidia-modeset rw
154-
DeviceAllow=/dev/shm rw
155159
EOF
156160
fi
157161

@@ -170,6 +174,7 @@ BindReadOnly = /tmp/.X11-unix
170174
171175
# GPU
172176
Bind = /dev/dri
177+
Bind = /dev/shm
173178
$(echo "$NVIDIA_BIND")
174179
# Controller
175180
Bind = /dev/input
@@ -239,7 +244,7 @@ $(echo "$X11_BIND_AND_CONFIG")
239244
# 启动环境变量
240245
RUN_ENVIRONMENT="LANG=\$LANG DISPLAY=\$DISPLAY GTK_IM_MODULE=\$GTK_IM_MODULE XMODIFIERS=\$XMODIFIERS QT_IM_MODULE=\$QT_IM_MODULE"
241246
if [[ \$(loginctl show-session \$(loginctl | grep \$USER |awk '{print \$1}') -p Type) == *wayland* ]]; then
242-
RUN_ENVIRONMENT="\$RUN_ENVIRONMENT WAYLAND_DISPLAY=\$WAYLAND_DISPLAY XAUTHORITY=\$XAUTHORITY"
247+
RUN_ENVIRONMENT="\$RUN_ENVIRONMENT XAUTHORITY=\$XAUTHORITY"
243248
fi
244249
EOF
245250

@@ -249,7 +254,11 @@ cat /bin/deepin-config
249254

250255
# 查询应用
251256
cat > /bin/deepin-query <<EOF
252-
machinectl shell deepin /bin/bash -c "ls /usr/share/applications"
257+
machinectl shell deepin /bin/su - u\$UID -c "ls /usr/share/applications \
258+
&& find /opt -name "*.desktop" \
259+
&& echo && echo query inode/directory && xdg-mime query default inode/directory \
260+
&& echo && echo query video/mp4 && xdg-mime query default video/mp4 \
261+
&& echo && echo query audio/flac && xdg-mime query default audio/flac"
253262
EOF
254263

255264
chmod 755 /bin/deepin-query
@@ -383,7 +392,8 @@ chmod 755 /bin/deepin-ecloud
383392

384393
# 安装文件管理器
385394
cat > /bin/deepin-install-thunar <<EOF
386-
machinectl shell deepin /usr/bin/bash -c "apt update && apt install -y thunar catfish dbus-x11 --no-install-recommends && apt autopurge -y"
395+
machinectl shell deepin /usr/bin/bash -c "apt update && apt install -y thunar catfish dbus-x11 xdg-utils --no-install-recommends && apt autopurge -y"
396+
machinectl shell deepin /bin/su - u\$UID -c "xdg-mime default Thunar.desktop inode/directory"
387397
EOF
388398

389399
chmod 755 /bin/deepin-install-thunar
@@ -449,4 +459,29 @@ source /bin/deepin-config
449459
machinectl shell deepin /bin/su - u\$UID -c "\$RUN_ENVIRONMENT start /opt/apps/com.xunlei.download/entries/applications/com.xunlei.download.desktop"
450460
EOF
451461

452-
chmod 755 /bin/deepin-xunlei
462+
chmod 755 /bin/deepin-xunlei
463+
464+
465+
466+
# 安装MPV
467+
cat > /bin/deepin-install-mpv <<EOF
468+
machinectl shell deepin /usr/bin/bash -c "apt update && apt install -y mpv --no-install-recommends && apt autopurge -y"
469+
EOF
470+
471+
chmod 755 /bin/deepin-install-mpv
472+
473+
# 启动MPV
474+
cat > /bin/deepin-mpv <<EOF
475+
#!/bin/bash
476+
source /bin/deepin-config
477+
machinectl shell deepin /bin/su - u\$UID -c "\$RUN_ENVIRONMENT start /usr/share/applications/mpv.desktop"
478+
EOF
479+
480+
chmod 755 /bin/deepin-mpv
481+
482+
483+
484+
# 添加启动器
485+
machinectl start deepin && sleep 0.3
486+
[[ $(deepin-query | grep com.qq.im.deepin.desktop) ]] && [ ! -f /usr/share/applications/deepin-qq.desktop ] && deepin-install-qq
487+
[[ $(deepin-query | grep com.qq.weixin.deepin.desktop) ]] && [ ! -f /usr/share/applications/deepin-weixin.desktop ] && deepin-install-weixin

nspawn-debian.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,7 @@ source `dirname ${BASH_SOURCE[0]}`/debian-config.sh
2222

2323

2424
# 默认安装QQ
25-
machinectl start debian && sleep 0.2
2625
debian-install-qq
26+
27+
# 清理
28+
debian-clean

nspawn-deepin.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ fi
1010

1111
# 创建容器
1212
[ -f /bin/apt ] && apt install -y systemd-container debootstrap
13-
[ -f /bin/pacman ] && pacman -S --noconfirm debootstrap
13+
[ -f /bin/pacman ] && pacman -S --noconfirm --needed debootstrap
1414
[ -f /bin/dnf ] && dnf install -y systemd-container debootstrap
1515
mkdir -p /home/$SUDO_USER/.machines/deepin
1616
ln -sf /home/$SUDO_USER/.machines/deepin /var/lib/machines
@@ -23,5 +23,7 @@ source `dirname ${BASH_SOURCE[0]}`/deepin-config.sh
2323

2424

2525
# 默认安装QQ
26-
machinectl start deepin && sleep 0.2
2726
deepin-install-qq
27+
28+
# 清理
29+
deepin-clean

0 commit comments

Comments
 (0)