VHSgunzo
commited on
Commit
·
120ae0f
1
Parent(s):
6635d66
v0.80.1
Browse files- CHANGELOG.md +18 -0
- LICENSE +1 -1
- README.md +2 -1
- index.html +233 -564
- lux-wine +8 -49
- lwrap/PKGBUILD +5 -5
- lwrap/lwexec +0 -109
- lwrap/lwrap +233 -564
- lwrap/lwrap.install +16 -3
- main.zip +2 -2
CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
# v0.78.5.5
|
2 |
|
3 |
* Update [lwrun](https://huggingface.co/lux-wine/lwrun/tree/main/releases/v0.39.1) packages
|
|
|
1 |
+
# v0.80.1
|
2 |
+
|
3 |
+
* Update [lwrun](https://github.com/VHSgunzo/runimage/releases/download/v0.40.1) container `v0.40.1`
|
4 |
+
* Update [GE-Proton](https://github.com/VHSgunzo/ge-proton-lw/releases/tag/v9.22) `v9.22`
|
5 |
+
* Change container filesystem to [DwarFS](https://github.com/mhx/dwarfs) (reduce size)
|
6 |
+
* Enable `OverlayFS` (read-write) mode by default
|
7 |
+
* Now you can install any apps and updates from the container repos without rebuilding the container
|
8 |
+
* Fix `firefox`, `steam`, `lux-wine` decorations (now as in the system)
|
9 |
+
* Remove `AMDVLK` vulkan driver
|
10 |
+
* Update `lwrap`
|
11 |
+
* Add `ru_RU.KOI8-R` locale
|
12 |
+
* Remove `lwexec` and all the other pieces that are now part of the container.
|
13 |
+
* Add [continuous](https://github.com/VHSgunzo/lwrun/releases/download/continuous) update CI for lwrun
|
14 |
+
* Add ability to enable sandbox for `HOME` or create tmpfs `HOME`
|
15 |
+
* Add ability to `lwrun` to system `/usr/bin` `/bin` `/opt` path
|
16 |
+
* Replace `glibc` and `lib32-glibc` with `glibc-eac` and `lib32-glibc-eac`
|
17 |
+
* Add an attempt to use a local proprietary Nvidia driver (if there are no 32-bit libs, the driver will be downloaded as before)
|
18 |
+
|
19 |
# v0.78.5.5
|
20 |
|
21 |
* Update [lwrun](https://huggingface.co/lux-wine/lwrun/tree/main/releases/v0.39.1) packages
|
LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
MIT License
|
2 |
|
3 |
-
Copyright (c)
|
4 |
|
5 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
of this software and associated documentation files (the "Software"), to deal
|
|
|
1 |
MIT License
|
2 |
|
3 |
+
Copyright (c) 2025 VHSgunzo
|
4 |
|
5 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
of this software and associated documentation files (the "Software"), to deal
|
README.md
CHANGED
@@ -49,7 +49,7 @@ wget -qO - lux-wine-git.static.hf.space|sed 1d|bash
|
|
49 |
## **Terminal usage**:
|
50 |
```
|
51 |
┌──[user@linux]─[~]
|
52 |
-
└──╼ $
|
53 |
|
54 |
-explorer Wine explorer
|
55 |
-cmd Open CMD or open file in CMD
|
@@ -117,6 +117,7 @@ lwrun --uninstall
|
|
117 |
- [x] Easy installation without root rights and dependencies
|
118 |
- [x] The ability to install completely offline
|
119 |
- [x] Own portable [lwrun container](https://github.com/VHSgunzo/lwrun) with isolation from the host system
|
|
|
120 |
- [x] Automatic rolling update system
|
121 |
- [x] Quick initialization and launch
|
122 |
- [x] Ability to specify EXE arguments and save them in settings
|
|
|
49 |
## **Terminal usage**:
|
50 |
```
|
51 |
┌──[user@linux]─[~]
|
52 |
+
└──╼ $ lwrun {lwrun arg} blabla.exe {exe args}
|
53 |
|
54 |
-explorer Wine explorer
|
55 |
-cmd Open CMD or open file in CMD
|
|
|
117 |
- [x] Easy installation without root rights and dependencies
|
118 |
- [x] The ability to install completely offline
|
119 |
- [x] Own portable [lwrun container](https://github.com/VHSgunzo/lwrun) with isolation from the host system
|
120 |
+
- [x] Ability to install apps from container repositories without root permissions
|
121 |
- [x] Automatic rolling update system
|
122 |
- [x] Quick initialization and launch
|
123 |
- [x] Ability to specify EXE arguments and save them in settings
|
index.html
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
#!/usr/bin/
|
2 |
# Lux Wine wrapper for RunImage container
|
3 |
|
4 |
shopt -s extglob
|
@@ -9,50 +9,20 @@ GREEN='\033[1;92m'
|
|
9 |
YELLOW='\033[1;33m'
|
10 |
RESETCOLOR='\033[1;00m'
|
11 |
|
12 |
-
# YC_S3="https://storage.yandexcloud.net"
|
13 |
-
GIT_REPO='https://github.com/VHSgunzo'
|
14 |
-
GIT_HF_REPO='https://huggingface.co/spaces/lux-wine'
|
15 |
-
# GIT_YC_REPO="$YC_S3/lux-wine"
|
16 |
LW_DIR="$HOME/.local/share/LuxWine"
|
17 |
MENU_APPS_DIR="$HOME/.local/share/applications"
|
18 |
-
LW_APPS_DIR="$MENU_APPS_DIR/LuxWineApps"
|
19 |
LW_CFG="$LW_DIR/luwine.wcfg"
|
20 |
-
TMP_LW_CFG="$LW_DIR/tmp/luwine.wcfg"
|
21 |
LWBIN_DIR="$LW_DIR/bin"
|
22 |
-
LWSRC=
|
23 |
-
GIT_RAW='https://raw.githubusercontent.com/VHSgunzo/lux-wine/main'
|
24 |
-
GIT_LWSRC="$GIT_RAW/lux-wine"
|
25 |
-
GIT_HF_LWSRC="$GIT_HF_REPO/git/resolve/main/lux-wine"
|
26 |
-
# GIT_YC_LWSRC="$GIT_YC_REPO/git/lux-wine"
|
27 |
-
GIT_LWZIP="$GIT_REPO/lux-wine/archive/refs/heads/main.zip"
|
28 |
-
GIT_HF_LWZIP="$GIT_HF_REPO/git/resolve/main/main.zip"
|
29 |
-
# GIT_YC_LWZIP="$GIT_YC_REPO/main.zip"
|
30 |
-
GIT_LWRAP="$GIT_RAW/lwrap/lwrap"
|
31 |
-
GIT_HF_LWRAP="$GIT_HF_REPO/git/resolve/main/lwrap/lwrap"
|
32 |
-
# GIT_YC_LWRAP="$GIT_YC_REPO/git/lwrap/lwrap"
|
33 |
-
GIT_LWRUN="$GIT_REPO/lwrun/releases"
|
34 |
-
GIT_HF_LWRUN="${GIT_HF_REPO//\/spaces/}/lwrun/resolve/main/releases"
|
35 |
-
# YC_LWRUN="$YC_S3/lwrun"
|
36 |
HOME_ICONS="$HOME/.local/share/icons"
|
37 |
HOME_DESK_DIRS="$HOME/.local/share/desktop-directories"
|
38 |
HSTEAM_DESKF="$MENU_APPS_DIR/steam-lw.desktop"
|
39 |
-
RSTEAM_DESKF="$RUNROOTFS/usr/share/applications/steam.desktop"
|
40 |
-
F_RC="$HOME/.config/fish/config.fish"
|
41 |
-
B_RC="$HOME/.bashrc"
|
42 |
-
Z_RC="$HOME/.zshrc"
|
43 |
HBIN_DIR="$HOME/.local/bin"
|
44 |
LWRUN_LN="$HBIN_DIR/lwrun"
|
45 |
-
|
46 |
-
LWRAP="$LWBIN_DIR/lwrap"
|
47 |
-
LWBASH="$LWBIN_DIR/bash"
|
48 |
LWRUN="$LWBIN_DIR/lwrun"
|
49 |
RUNIMAGE_LW="$LWBIN_DIR/runimage-lw"
|
50 |
-
|
51 |
-
LWRUNTIME="$LWRAP_DIR/runtime.tar.zst"
|
52 |
-
HLWDIRLN="$HOME/LuxWine"
|
53 |
-
LW_DEF_TMP="$LW_DIR/tmp"
|
54 |
-
LWRPIDFL="$LW_DEF_TMP/lwrpid"
|
55 |
-
LWEXEC="$LWBIN_DIR/lwexec"
|
56 |
HICOLOR_SIZES=(
|
57 |
"512x512" "256x256" "192x192" "128x128"
|
58 |
"96x96" "80x80" "72x72" "64x64" "48x48"
|
@@ -64,20 +34,12 @@ LW_MIMETYPES=(
|
|
64 |
'application/x-ms-shortcut' 'text/x-ms-regedit'
|
65 |
)
|
66 |
|
67 |
-
if [[ -n "$RUNSRC" && -d "$RUNROOTFS" ]] && \
|
68 |
-
[[ -x "$LWRAP" && "$NO_EXT_LWRAP" != 1 ]]
|
69 |
-
then
|
70 |
-
NO_EXT_LWRAP=1 "$LWRAP" "$@"
|
71 |
-
exit $?
|
72 |
-
fi
|
73 |
-
unset NO_EXT_LWRAP
|
74 |
-
|
75 |
CFG_CHK_UPDATE="$(grep '^CHK_UPDATE=.*$' "$LW_CFG" 2>/dev/null)"
|
76 |
[ -n "$CFG_CHK_UPDATE" ] && \
|
77 |
eval "$CFG_CHK_UPDATE"||\
|
78 |
CHK_UPDATE='3'
|
79 |
|
80 |
-
[ !
|
81 |
NOT_TERM=1||NOT_TERM=0
|
82 |
|
83 |
error_msg() {
|
@@ -107,124 +69,96 @@ warn_msg() {
|
|
107 |
fi
|
108 |
}
|
109 |
|
110 |
-
check_path() {
|
111 |
-
if [ "$1" == "$F_RC" ]
|
112 |
-
then grep -om1 '^set -U fish_user_paths "$HOME/.local/bin"' "$1" &>/dev/null
|
113 |
-
else grep -om1 '^export PATH=.*/.local/bin' "$1" &>/dev/null
|
114 |
-
fi
|
115 |
-
}
|
116 |
-
|
117 |
-
add_path() {
|
118 |
-
if [ "$1" == "$F_RC" ]
|
119 |
-
then check_path "$1"||(mkdir -p "$(dirname "$1")" && echo -e '\nset -U fish_user_paths "$HOME/.local/bin"' >> "$1")
|
120 |
-
else check_path "$1"||echo -e '\nexport PATH="$HOME/.local/bin:$PATH"' >> "$1"
|
121 |
-
fi
|
122 |
-
}
|
123 |
-
|
124 |
-
ln_lwrap() { [[ -x "$LWRAP" && -x "$LWRAP_LN" ]]||(mkdir -p "$HBIN_DIR" && ln -sfr "$LWRAP" "$LWRAP_LN") ; }
|
125 |
-
|
126 |
make_install() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
if [ "$1" == "force" ]
|
128 |
then QUIET_MODE=1 uninstall_lw force
|
129 |
else QUIET_MODE=1 uninstall_lw update
|
130 |
fi
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
then
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
install -Dm644 LuxWine.menu "$HOME/.config/menus/applications-merged/LuxWine.menu"
|
161 |
-
if [ "$KDE_SESSION_VERSION" == 6 ]
|
162 |
-
then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kio/servicemenus/LuxWineService.desktop"
|
163 |
-
elif [ "$KDE_SESSION_VERSION" == 5 ]
|
164 |
-
then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kservices5/ServiceMenus/LuxWineService.desktop"
|
165 |
-
fi
|
166 |
-
mkdir -p "$MENU_APPS_DIR"
|
167 |
-
mkdir -p "$HOME_DESK_DIRS"
|
168 |
-
cp -rf mime "$HOME/.local/share/mime"
|
169 |
-
cp -rf applications "$MENU_APPS_DIR/LuxWine"
|
170 |
-
cp -rf directories/* "$HOME_DESK_DIRS/"
|
171 |
-
if [[ -d "$RUNROOTFS" && -f "$RSTEAM_DESKF" ]]
|
172 |
-
then
|
173 |
-
cp -rf "$RSTEAM_DESKF" "$HSTEAM_DESKF"
|
174 |
-
sed -i "s|^Exec.*steam-runtime|Exec='$HBIN_DIR/steam-runtime'|g" "$HSTEAM_DESKF"
|
175 |
-
sed -i "s|^Name=Steam (Runtime)|Name=Steam (RunImage LW)|g" "$HSTEAM_DESKF"
|
176 |
-
HICNSTM="$HOME_ICONS/steam.png"
|
177 |
-
for hi_icon_size in ${HICOLOR_SIZES[@]}
|
178 |
-
do
|
179 |
-
HICONS_DIR="$HOME_ICONS/hicolor/$hi_icon_size/apps"
|
180 |
-
RSTEAM_ICON="$RUNROOTFS/usr/share/icons/hicolor/$hi_icon_size/apps/steam.png"
|
181 |
-
HSTEAM_ICON="$HICONS_DIR/steam.png"
|
182 |
-
if [[ -f "$RSTEAM_ICON" && ! -f "$HSTEAM_ICON" ]]
|
183 |
-
then
|
184 |
-
mkdir -p "$HICONS_DIR"
|
185 |
-
[ -L "$HSTEAM_ICON" ] && \
|
186 |
-
rm -f "$HSTEAM_ICON"
|
187 |
-
cp -rf "$RSTEAM_ICON" "$HSTEAM_ICON"
|
188 |
-
fi
|
189 |
-
if [[ -f "$RSTEAM_ICON" && ! -f "$HICNSTM" ]]
|
190 |
-
then
|
191 |
-
mkdir -p "$HOME_ICONS"
|
192 |
-
[ -L "$HICNSTM" ] && \
|
193 |
-
rm -f "$HICNSTM"
|
194 |
-
cp -rf "$RSTEAM_ICON" "$HICNSTM"
|
195 |
-
fi
|
196 |
-
done
|
197 |
-
fi
|
198 |
-
[ "$ENABLE_HOSTEXEC" == 1 ] && \
|
199 |
-
local INSTALL_SHELL="$(hostexec echo '$SHELL')"||\
|
200 |
-
local INSTALL_SHELL="$SHELL"
|
201 |
-
case "$(basename "$INSTALL_SHELL")" in
|
202 |
-
zsh) add_path "$Z_RC" ;;
|
203 |
-
bash) add_path "$B_RC" ;;
|
204 |
-
fish) add_path "$F_RC" ;;
|
205 |
-
esac
|
206 |
-
update-desktop-database -q "$MENU_APPS_DIR" &>/dev/null
|
207 |
-
update-mime-database "$HOME/.local/share/mime" &>/dev/null
|
208 |
-
for mimetype in "${LW_MIMETYPES[@]}"
|
209 |
-
do xdg-mime default LuxWine.desktop "$mimetype" &>/dev/null
|
210 |
done
|
211 |
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
212 |
cp -rf registry_patch "$LW_DIR/"
|
213 |
cp -rf LICENSE "$LW_DIR/"
|
214 |
cp -rf themes "$LW_DIR/"
|
215 |
cp -rf icons "$LW_DIR/"
|
216 |
cp -rf gif "$LW_DIR/"
|
217 |
cp -rf db "$LW_DIR/"
|
|
|
218 |
if [ -f "$LWRUNTIME" ]
|
219 |
then
|
|
|
220 |
tar -xf "$LWRUNTIME" -C "$LW_DIR" && \
|
221 |
[[ ! -f "$LW_CFG" && -f "$TMP_LW_CFG" ]] && \
|
222 |
cp -f "$TMP_LW_CFG" "$LW_CFG"
|
223 |
fi
|
224 |
-
grep "$
|
225 |
-
xargs -d'\n' sed -i "s|$
|
226 |
-
grep "$LWRUN" -lr "$MENU_APPS_DIR"|\
|
227 |
-
xargs -d'\n' sed -i "s|$LWRUN|$LWRAP|g" 2>/dev/null
|
228 |
}
|
229 |
|
230 |
mv_lwrun() {
|
@@ -235,80 +169,65 @@ mv_lwrun() {
|
|
235 |
fi
|
236 |
}
|
237 |
|
238 |
-
is_not_pts_home() {
|
239 |
-
[[ "$SANDBOX_HOME" != 1 && "$SANDBOX_HOME_DL" != 1 && ! -d "$SANDBOXHOMEDIR/lwrap" && \
|
240 |
-
"$PORTABLE_HOME" != 1 && "$TMP_HOME" != 1 && "$TMP_HOME_DL" != 1 && ! -d "$PORTABLEHOMEDIR/lwrap" ]]
|
241 |
-
}
|
242 |
-
|
243 |
try_install_lwrun() {
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
then
|
252 |
-
|
253 |
-
"$
|
|
|
|
|
254 |
fi
|
255 |
-
try_shutdown_lw && \
|
256 |
-
return 0||return 1
|
257 |
}
|
258 |
-
if
|
|
|
|
|
259 |
then
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
"$LWRUN_INSTALLED" != 1 ]]
|
264 |
then
|
265 |
-
info_msg "Installing lwrun..."
|
266 |
-
mkdir -p "$LWBIN_DIR"
|
267 |
-
if mv_lwrun "$RUNSRCRPTH" "$LWRUN"
|
268 |
-
then finalize_install
|
269 |
-
else
|
270 |
-
error_msg "Failed to install lwrun!"
|
271 |
-
is_lwrun && \
|
272 |
-
return 1||exit 1
|
273 |
-
fi
|
274 |
-
elif [[ "$RUNSRCRPTH" =~ "Run" && "$RUNSRCRPTH" != "$REALP_LWRUN" ]]
|
275 |
-
then
|
276 |
-
mkdir -p "$LWBIN_DIR"
|
277 |
-
ln -sf "$RUNSRCRPTH" "$LWRUN"
|
278 |
ln_lwrun
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
|
|
|
|
|
|
283 |
fi
|
284 |
-
|
285 |
-
}
|
286 |
-
|
287 |
-
ln_lwrun() {
|
288 |
-
if is_lwrun
|
289 |
then
|
290 |
-
mkdir -p "$
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
ln -sfr "$LWRUN" "$LWRUN_LN"
|
296 |
-
fi
|
297 |
-
for steam in {steam,steam-runtime,steam-native}
|
298 |
-
do
|
299 |
-
if [ ! -f "$HBIN_DIR/$steam" ]
|
300 |
-
then
|
301 |
-
info_msg "Update $steam link..."
|
302 |
-
ln -sfr "$LWRUN" "$HBIN_DIR/$steam"
|
303 |
-
fi
|
304 |
-
done
|
305 |
-
if [ "$(readrealpath "$RUNIMAGE_LW")" != "$REALP_LWRUN" ]
|
306 |
-
then
|
307 |
-
info_msg "Update runimage link..."
|
308 |
-
mkdir -p "$LWBIN_DIR"
|
309 |
-
ln -sfr "$LWRUN" "$RUNIMAGE_LW"
|
310 |
-
ln -sfr "$LWRUN" "$HBIN_DIR/runimage-lw"
|
311 |
-
fi
|
312 |
fi
|
313 |
}
|
314 |
|
@@ -316,29 +235,31 @@ uninstall_lw() {
|
|
316 |
if [ "$1" == "force" ] || is_lw || is_lwrun
|
317 |
then
|
318 |
info_msg "Removing Lux Wine..."
|
319 |
-
rm -
|
320 |
rm -rf "$MENU_APPS_DIR/LuxWine"
|
321 |
rm -rf "$HOME_DESK_DIRS/LuxWine"*
|
322 |
-
rm -
|
323 |
rm -rf "$HOME/.local/share/kservices5/ServiceMenus/LuxWine"*
|
324 |
rm -rf "$HOME/.local/share/kio/servicemenus/LuxWine"*
|
|
|
|
|
|
|
|
|
|
|
325 |
if [ "$1" == "update" ]
|
326 |
then
|
327 |
-
rm -rf "$LWSRC"
|
328 |
-
rm -rf "$LWRAP"
|
329 |
-
rm -rf "$LWBASH"
|
330 |
rm -rf "$LW_DIR/db"
|
331 |
rm -rf "$LW_DIR/gif"
|
332 |
rm -rf "$LW_DIR/icons"
|
333 |
rm -rf "$LW_DIR/themes"
|
334 |
-
rm -
|
335 |
-
rm -
|
336 |
rm -rf "$LW_DIR/registry_patch"
|
337 |
else
|
|
|
338 |
rm -rf "$LW_DIR"
|
339 |
-
rm -rf "$
|
340 |
rm -rf "$LWRUN_LN"
|
341 |
-
rm -rf "$LWRAP_LN"
|
342 |
rm -rf "$HBIN_DIR/runimage-lw"
|
343 |
rm -rf "$MENU_APPS_DIR/LuxWine"*
|
344 |
rm -rf "$HOME/Desktop/LuxWine.desktop"
|
@@ -362,68 +283,22 @@ is_net_conn() {
|
|
362 |
fi
|
363 |
}
|
364 |
|
365 |
-
|
366 |
-
if is_exe_exist unzip
|
367 |
-
then
|
368 |
-
unzip "$1" -d "$2" &>/dev/null
|
369 |
-
elif is_exe_exist 7z
|
370 |
-
then
|
371 |
-
7z x "$1" -o"$2" &>/dev/null
|
372 |
-
elif is_exe_exist bsdtar
|
373 |
-
then
|
374 |
-
mkdir -p "$2"
|
375 |
-
bsdtar -x -f "$1" -C "$2" &>/dev/null
|
376 |
-
else
|
377 |
-
error_msg "zip archivator not found!"
|
378 |
-
exit 1
|
379 |
-
fi
|
380 |
-
}
|
381 |
|
382 |
-
|
383 |
|
384 |
is_lwrun() { [ -x "$LWRUN" ] ; }
|
385 |
|
386 |
-
try_dl_lwzip() {
|
387 |
-
local lwzipurl=(
|
388 |
-
# "$GIT_YC_LWZIP"
|
389 |
-
"$GIT_HF_LWZIP"
|
390 |
-
"$GIT_LWZIP"
|
391 |
-
)
|
392 |
-
for url in "${lwzipurl[@]}"
|
393 |
-
do
|
394 |
-
try_dl "$url" "$TMP_LW.zip" && \
|
395 |
-
return 0
|
396 |
-
done
|
397 |
-
return 1
|
398 |
-
}
|
399 |
-
|
400 |
install_lw() {
|
401 |
-
install_local_lw() {
|
402 |
-
if [ -d "/opt/lwrap" ]
|
403 |
-
then
|
404 |
-
info_msg "Installing Lux Wine from container..."
|
405 |
-
(mkdir -p "$TMP_LW" && \
|
406 |
-
cp -rf "/opt/lwrap"/!(runtime.tar.zst|prefix_backups) "$TMP_LW" && \
|
407 |
-
cd "$TMP_LW" && \
|
408 |
-
make_install "$1"
|
409 |
-
rm_tmplw)
|
410 |
-
fi
|
411 |
-
}
|
412 |
-
rm_tmplw() { [[ -d "$TMP_LW" || -f "$TMP_LW.zip" ]] && rm -rf "$TMP_LW"* ; }
|
413 |
TMP_LW="/tmp/lux-wine.$RANDOM"
|
414 |
-
if [
|
415 |
-
is_net_conn
|
416 |
then
|
417 |
info_msg "Installing Lux Wine..."
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
rm_tmplw)
|
424 |
-
else install_local_lw "$1"
|
425 |
-
fi
|
426 |
-
else install_local_lw "$1"
|
427 |
fi
|
428 |
if is_lw
|
429 |
then info_msg "Lux Wine installed!"
|
@@ -433,167 +308,40 @@ install_lw() {
|
|
433 |
fi
|
434 |
}
|
435 |
|
436 |
-
vers_parser() { grep -Po '\d+'|sed ':a;/$/N;s/\n//;ta' ; }
|
437 |
-
|
438 |
-
set_git_lw_version() {
|
439 |
-
unset GIT_LW_VERSION
|
440 |
-
local lwsrcusrls=(
|
441 |
-
# "$GIT_YC_LWSRC"
|
442 |
-
"$GIT_HF_LWSRC"
|
443 |
-
"$GIT_LWSRC"
|
444 |
-
)
|
445 |
-
for url in "${lwsrcusrls[@]}"
|
446 |
-
do
|
447 |
-
GIT_LW_VERSION="$(NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 \
|
448 |
-
try_dl "$url" /dev/stdout 2>/dev/null|get_lw_version)"
|
449 |
-
[ -n "$GIT_LW_VERSION" ] && return 0
|
450 |
-
done
|
451 |
-
return 1
|
452 |
-
}
|
453 |
-
|
454 |
-
get_lw_version() {
|
455 |
-
if [ -n "$1" ]
|
456 |
-
then grep -m1 'LW_VERSION' "$1" 2>/dev/null|vers_parser
|
457 |
-
else grep -m1 'LW_VERSION'|vers_parser
|
458 |
-
fi
|
459 |
-
}
|
460 |
-
|
461 |
-
try_dllwrap_mirror() {
|
462 |
-
local lwrapurl=(
|
463 |
-
# "$GIT_YC_LWRAP"
|
464 |
-
"$GIT_HF_LWRAP"
|
465 |
-
"$GIT_LWRAP"
|
466 |
-
)
|
467 |
-
for url in "${lwrapurl[@]}"
|
468 |
-
do
|
469 |
-
try_dl "$url" "$TMP_LWRAP" && \
|
470 |
-
return 0
|
471 |
-
done
|
472 |
-
return 1
|
473 |
-
}
|
474 |
-
|
475 |
-
update_lwrap() {
|
476 |
-
info_msg "Update lwrap..."
|
477 |
-
TMP_LWRAP="${LWRAP}.new$BASHPID"
|
478 |
-
if try_dllwrap_mirror
|
479 |
-
then
|
480 |
-
mv -f "$TMP_LWRAP" "$LWRAP"
|
481 |
-
chmod +x "$LWRAP"
|
482 |
-
ln_lwrap
|
483 |
-
else
|
484 |
-
error_msg "Failed to get lwrap!"
|
485 |
-
return 1
|
486 |
-
fi
|
487 |
-
}
|
488 |
-
|
489 |
-
update_lw() {
|
490 |
-
if is_lw
|
491 |
-
then
|
492 |
-
info_msg "Checking the Lux Wine update..."
|
493 |
-
set_git_lw_version
|
494 |
-
LW_VERSION="$(get_lw_version "$LWSRC")"
|
495 |
-
if [[ -n "$GIT_LW_VERSION" && -n "$LW_VERSION" ]]
|
496 |
-
then
|
497 |
-
if [ "$LW_VERSION" != "$GIT_LW_VERSION" ]
|
498 |
-
then
|
499 |
-
if is_update "Lux Wine"
|
500 |
-
then
|
501 |
-
info_msg "Lux Wine update..."
|
502 |
-
if update_lwrap
|
503 |
-
then "$LWRAP" --install||\
|
504 |
-
exit 1
|
505 |
-
else exit 1
|
506 |
-
fi
|
507 |
-
fi
|
508 |
-
else
|
509 |
-
info_msg "The latest version is already installed!"
|
510 |
-
touch "$LWSRC"
|
511 |
-
fi
|
512 |
-
else
|
513 |
-
error_msg "Failed to check for updates!"
|
514 |
-
return 1
|
515 |
-
fi
|
516 |
-
else
|
517 |
-
error_msg "Lux Wine is not installed!"
|
518 |
-
exit 1
|
519 |
-
fi
|
520 |
-
}
|
521 |
-
|
522 |
-
get_lwrun_git_ver() {
|
523 |
-
NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl "$GIT_LWRUN/latest" \
|
524 |
-
/dev/stdout 2>/dev/null|grep -m1 "Release v.*"|awk '{print$2}'
|
525 |
-
}
|
526 |
-
|
527 |
-
get_lwrun_hf_ver() {
|
528 |
-
NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl \
|
529 |
-
"${GIT_HF_LWRUN/resolve/tree}" /dev/stdout \
|
530 |
-
2>/dev/null|grep -Po "v\d+\.\d+\.\d+"|tail -1
|
531 |
-
}
|
532 |
-
|
533 |
-
# get_lwrun_yc_ver() {
|
534 |
-
# NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl \
|
535 |
-
# "$YC_LWRUN" /dev/stdout 2>/dev/null|tr '<' '\n'|\
|
536 |
-
# grep '^Key>'|sed 's|^Key>||g'|grep '^releases'|\
|
537 |
-
# awk -F/ 'END {print$2}'
|
538 |
-
# }
|
539 |
-
|
540 |
-
set_git_lwrun_ver() {
|
541 |
-
# for src in yc git hf
|
542 |
-
for src in git hf
|
543 |
-
do
|
544 |
-
GIT_LWRUN_VERSION="$(get_lwrun_${src}_ver)"
|
545 |
-
[ -n "$GIT_LWRUN_VERSION" ] && return 0
|
546 |
-
done
|
547 |
-
return 1
|
548 |
-
}
|
549 |
-
|
550 |
-
try_dllwrun_mirror() {
|
551 |
-
local lwrunurl=(
|
552 |
-
# "$YC_LWRUN/releases/$GIT_LWRUN_VERSION/lwrun"
|
553 |
-
"$GIT_HF_LWRUN/$GIT_LWRUN_VERSION/lwrun"
|
554 |
-
"$GIT_LWRUN/download/$GIT_LWRUN_VERSION/lwrun"
|
555 |
-
)
|
556 |
-
for url in "${lwrunurl[@]}"
|
557 |
-
do
|
558 |
-
try_dl "$url" "$TMP_LWRUN" && \
|
559 |
-
return 0
|
560 |
-
done
|
561 |
-
return 1
|
562 |
-
}
|
563 |
-
|
564 |
try_dl_lwrun() {
|
565 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
info_msg "Downloading lwrun..."
|
567 |
-
|
568 |
-
if [ -n "$GIT_LWRUN_VERSION" ] && \
|
569 |
-
try_dllwrun_mirror
|
570 |
then
|
571 |
info_msg "lwrun downloaded!"
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
else
|
576 |
error_msg "Failed to download lwrun!"
|
577 |
[ -f "$TMP_LWRUN" ] && \
|
578 |
rm -rf "$TMP_LWRUN"*
|
579 |
exit 1
|
580 |
fi
|
581 |
-
|
582 |
-
|
583 |
-
runimage_lw() {
|
584 |
-
[ "$NOT_TERM" != 1 ] && \
|
585 |
-
unset HOSTEXEC_IN_TERM||\
|
586 |
-
HOSTEXEC_IN_TERM=(
|
587 |
-
"xterm" "-fa" "Monospace"
|
588 |
-
"-fs" "11" "-geometry" "130x45"
|
589 |
-
"-bg" "black" "-fg" "white" \
|
590 |
-
"-T" "Updating RunImage packages..." "-e"
|
591 |
-
)
|
592 |
-
if [ "$ENABLE_HOSTEXEC" == 1 ]
|
593 |
-
then "${HOSTEXEC_IN_TERM[@]}" hostexec ptyspawn importenv '$RUNPID' \
|
594 |
-
env DONT_NOTIFY=1 NO_RPIDSMON=1 "$RUNIMAGE_LW" "$@"
|
595 |
-
else "$RUNIMAGE_LW" "$@"
|
596 |
-
fi
|
597 |
}
|
598 |
|
599 |
yn_case() {
|
@@ -633,7 +381,7 @@ is_update() {
|
|
633 |
}
|
634 |
|
635 |
try_shutdown_lw() {
|
636 |
-
if [ -n "$(pgrep -fa lux-wine|grep -
|
637 |
then
|
638 |
if [ "$FORCE_UPDATE" != 1 ]
|
639 |
then
|
@@ -658,51 +406,33 @@ try_shutdown_lw() {
|
|
658 |
|
659 |
no_color() { sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g" ; }
|
660 |
|
661 |
-
|
|
|
662 |
if is_update "RunImage" "Do you want to check updates for RunImage packages?"
|
663 |
then
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
fi
|
679 |
-
|
680 |
-
|
681 |
-
update_lwrun() {
|
682 |
-
if is_lwrun
|
683 |
-
then
|
684 |
-
local ret=1
|
685 |
-
info_msg "Checking the lwrun update..."
|
686 |
-
if [ "$NO_RUNPKG_UPDATE" != 1 ]
|
687 |
-
then
|
688 |
-
update_runimage
|
689 |
-
ret=$?
|
690 |
-
[ "$ret" == 0 ] && \
|
691 |
-
lwrap_init
|
692 |
-
fi
|
693 |
-
return $ret
|
694 |
-
else
|
695 |
-
error_msg "lwrun is not installed!"
|
696 |
-
exit 1
|
697 |
-
fi
|
698 |
-
}
|
699 |
|
700 |
is_exe_exist() { command -v "$@" &>/dev/null ; }
|
701 |
|
702 |
which_exe() { command -v "$@" ; }
|
703 |
|
704 |
check_url_stat_code() {
|
705 |
-
set -o pipefail
|
706 |
if is_exe_exist curl
|
707 |
then curl -sL -o /dev/null -I -w "%{http_code}" "$@" 2>/dev/null
|
708 |
elif is_exe_exist wget
|
@@ -780,7 +510,7 @@ try_dl() {
|
|
780 |
fi
|
781 |
if is_url "$URL"
|
782 |
then
|
783 |
-
WGET_ARGS=(--no-check-certificate -t 3 -T 5 -w 0.5 "$URL" -O "$FILEDIR/$FILENAME")
|
784 |
[ ! -d "$FILEDIR" ] && \
|
785 |
mkdir -p "$FILEDIR"
|
786 |
if [[ "$NOT_TERM" == 1 && "$NO_DL_GUI" != 1 ]] && \
|
@@ -849,7 +579,7 @@ try_dl() {
|
|
849 |
elif is_exe_exist curl
|
850 |
then
|
851 |
curl -R --progress-bar --insecure --fail -L "$URL" -o \
|
852 |
-
"$FILEDIR/$FILENAME" |& tr '\r' '\n'
|
853 |
sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g'|\
|
854 |
dl_progress
|
855 |
elif is_exe_exist wget2
|
@@ -892,28 +622,38 @@ try_dl() {
|
|
892 |
fi
|
893 |
}
|
894 |
|
895 |
-
try_set_lwrpid() { lwrpid="$(cat "$LWRPIDFL" 2>/dev/null)" ; }
|
896 |
-
|
897 |
rm_broken_link() { find -L "$1" -type l -exec rm -rf {} \; 2>/dev/null ; }
|
898 |
|
899 |
-
|
900 |
-
if
|
901 |
-
then
|
902 |
-
|
903 |
-
|
904 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
905 |
fi
|
906 |
}
|
907 |
|
908 |
print_help() {
|
909 |
-
HLPHOSTNAME="$(uname -a|awk '{print$2}')"
|
910 |
-
[[ "$RUNSRC" =~ "lwrun" ]] && \
|
911 |
-
HLPEXENAME="lwrun"||\
|
912 |
-
HLPEXENAME="lwrap"
|
913 |
echo -e "
|
914 |
${RED}Usage:
|
915 |
$RED┌──[$GREEN$RUNUSER$YELLOW@$BLUE${RUNHOSTNAME}$RED]─[$GREEN$PWD$RED]
|
916 |
-
$RED└──╼ \$$GREEN
|
917 |
|
918 |
${BLUE}--lwrap-help $GREEN Show this usage info
|
919 |
${BLUE}--install $YELLOW{force|local}$GREEN Re/Install Lux Wine and lwrun
|
@@ -922,112 +662,41 @@ print_help() {
|
|
922 |
"
|
923 |
}
|
924 |
|
925 |
-
RUNSRCRPTH="$(readrealpath "$RUNSRC")"
|
926 |
-
|
927 |
case "$1" in
|
928 |
-
--lwrap-help) print_help
|
929 |
-
|
930 |
-
--uninstall) uninstall_lw "$2"
|
931 |
-
exit $? ;;
|
932 |
-
--install) try_install_lwrun
|
933 |
-
is_lwrun||try_dl_lwrun
|
934 |
-
install_lw "$2"
|
935 |
-
exit $? ;;
|
936 |
-
--update) FORCE_UPDATE=1
|
937 |
-
update_lw
|
938 |
-
update_lwrun
|
939 |
-
exit $? ;;
|
940 |
esac
|
941 |
|
942 |
-
if [
|
943 |
then
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
944 |
try_install_lwrun
|
945 |
-
is_lw||install_lw
|
946 |
if [[ "$CHK_UPDATE" != 0 || "$FORCE_UPDATE" == 1 ]] && \
|
947 |
is_net_conn
|
948 |
then
|
949 |
-
if [[ ! -
|
950 |
-
-print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
|
951 |
-
then update_lw
|
952 |
-
fi
|
953 |
-
if is_not_pts_home && \
|
954 |
-
[[ ! -x "$(find "$LWRUN" -mtime -$CHK_UPDATE \
|
955 |
-print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
|
956 |
then update_lwrun && exit $?
|
957 |
fi
|
958 |
fi
|
959 |
-
|
960 |
-
then "$LWSRC" -init
|
961 |
-
else
|
962 |
-
try_set_lwrpid
|
963 |
-
if ! [[ -n "$lwrpid" && -f "/tmp/.bwinf.$lwrpid" && -d "/proc/$lwrpid" ]]
|
964 |
-
then
|
965 |
-
LWEXECFLDIR="/tmp/.lwexec.$RUNPID"
|
966 |
-
mkdir -p "$LW_DEF_TMP"
|
967 |
-
echo "$RUNPID" > "$LWRPIDFL" 2>/dev/null
|
968 |
-
(JOBNUMFL="$LWEXECFLDIR/job"
|
969 |
-
mkdir -p "$LWEXECFLDIR" 2>/dev/null
|
970 |
-
mkfifo "$JOBNUMFL" 2>/dev/null
|
971 |
-
unset jobnum
|
972 |
-
while [[ -d "/proc/$RUNPID" && -d "$LWEXECFLDIR" ]]
|
973 |
-
do
|
974 |
-
jobnum=$(( $jobnum + 1 ))
|
975 |
-
execjobdir="$LWEXECFLDIR/$jobnum"
|
976 |
-
execenvfl="$execjobdir/env"
|
977 |
-
execjobfl="$execjobdir/exec"
|
978 |
-
execjoboutfl="$execjobdir/out"
|
979 |
-
execjobstatfl="$execjobdir/stat"
|
980 |
-
mkdir "$execjobdir" 2>/dev/null
|
981 |
-
mkfifo "$execenvfl" 2>/dev/null
|
982 |
-
mkfifo "$execjobfl" 2>/dev/null
|
983 |
-
mkfifo "$execjoboutfl" 2>/dev/null
|
984 |
-
mkfifo "$execjobstatfl" 2>/dev/null
|
985 |
-
tee <<<"$jobnum" "$JOBNUMFL" &>/dev/null
|
986 |
-
if [ -e "$execjobfl" ]
|
987 |
-
then
|
988 |
-
(OLD_PATH="$PATH"
|
989 |
-
OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
|
990 |
-
source "$execenvfl" && cd "$PWD"
|
991 |
-
export PATH="$PATH:$OLD_PATH"
|
992 |
-
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OLD_LD_LIBRARY_PATH"
|
993 |
-
cat "$execjobfl" 2>/dev/null|"$RUNSTATIC/bash" &>"$execjoboutfl" &
|
994 |
-
execjobpid=$!
|
995 |
-
tee <<<"$execjobpid" "$execjobstatfl" &>/dev/null
|
996 |
-
wait $execjobpid 2>/dev/null
|
997 |
-
execstat=$?
|
998 |
-
tee <<<"$execstat" "$execjobstatfl" &>/dev/null) &
|
999 |
-
fi
|
1000 |
-
done) &
|
1001 |
-
fi
|
1002 |
-
"$LWSRC" "$@"
|
1003 |
-
[ -d "$LWEXECFLDIR" ] && \
|
1004 |
-
rm -rf "$LWEXECFLDIR"
|
1005 |
-
[ -f "$LWRPIDFL" ] && \
|
1006 |
-
rm -f "$LWRPIDFL"
|
1007 |
-
fi
|
1008 |
else
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
then
|
1013 |
-
LWEXECFLDIR="/tmp/.lwexec.$lwrpid" \
|
1014 |
-
NOT_TERM="$NOT_TERM" "$LWEXEC" "$LWSRC" "$@"
|
1015 |
-
elif [ -x "$LWRUN_LN" ]
|
1016 |
-
then "$LWRUN_LN" "$@"
|
1017 |
-
elif is_lwrun
|
1018 |
-
then "$LWRUN" "$@"
|
1019 |
-
elif [ -x "$(which_exe lwrun)" ]
|
1020 |
-
then "$(which_exe lwrun)" "$@"
|
1021 |
else
|
1022 |
-
|
1023 |
-
|
1024 |
-
update_lwrap
|
1025 |
-
try_dl_lwrun && \
|
1026 |
-
"$LWRUN"
|
1027 |
-
else
|
1028 |
-
error_msg "lwrun not found, download and install it first!"
|
1029 |
-
exit 1
|
1030 |
-
fi
|
1031 |
fi
|
1032 |
fi
|
1033 |
exit $?
|
|
|
1 |
+
#!/usr/bin/bash
|
2 |
# Lux Wine wrapper for RunImage container
|
3 |
|
4 |
shopt -s extglob
|
|
|
9 |
YELLOW='\033[1;33m'
|
10 |
RESETCOLOR='\033[1;00m'
|
11 |
|
|
|
|
|
|
|
|
|
12 |
LW_DIR="$HOME/.local/share/LuxWine"
|
13 |
MENU_APPS_DIR="$HOME/.local/share/applications"
|
|
|
14 |
LW_CFG="$LW_DIR/luwine.wcfg"
|
|
|
15 |
LWBIN_DIR="$LW_DIR/bin"
|
16 |
+
LWSRC='/opt/lwrap/bin/lux-wine'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
HOME_ICONS="$HOME/.local/share/icons"
|
18 |
HOME_DESK_DIRS="$HOME/.local/share/desktop-directories"
|
19 |
HSTEAM_DESKF="$MENU_APPS_DIR/steam-lw.desktop"
|
|
|
|
|
|
|
|
|
20 |
HBIN_DIR="$HOME/.local/bin"
|
21 |
LWRUN_LN="$HBIN_DIR/lwrun"
|
22 |
+
OLDLWRAP="$LWBIN_DIR/lwrap"
|
|
|
|
|
23 |
LWRUN="$LWBIN_DIR/lwrun"
|
24 |
RUNIMAGE_LW="$LWBIN_DIR/runimage-lw"
|
25 |
+
PKGUPDFL="$LWBIN_DIR/.update"
|
|
|
|
|
|
|
|
|
|
|
26 |
HICOLOR_SIZES=(
|
27 |
"512x512" "256x256" "192x192" "128x128"
|
28 |
"96x96" "80x80" "72x72" "64x64" "48x48"
|
|
|
34 |
'application/x-ms-shortcut' 'text/x-ms-regedit'
|
35 |
)
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
CFG_CHK_UPDATE="$(grep '^CHK_UPDATE=.*$' "$LW_CFG" 2>/dev/null)"
|
38 |
[ -n "$CFG_CHK_UPDATE" ] && \
|
39 |
eval "$CFG_CHK_UPDATE"||\
|
40 |
CHK_UPDATE='3'
|
41 |
|
42 |
+
[[ ! "$(LANG= tty|grep -v 'not a')" =~ tty|pts ]] && \
|
43 |
NOT_TERM=1||NOT_TERM=0
|
44 |
|
45 |
error_msg() {
|
|
|
69 |
fi
|
70 |
}
|
71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
make_install() {
|
73 |
+
add_path() {
|
74 |
+
check_path() {
|
75 |
+
if [ "$1" == "$F_RC" ]
|
76 |
+
then grep -om1 '^set -U fish_user_paths "$HOME/.local/bin"' "$1" &>/dev/null
|
77 |
+
else grep -om1 '^export PATH=.*/.local/bin' "$1" &>/dev/null
|
78 |
+
fi
|
79 |
+
}
|
80 |
+
if [ "$1" == "$F_RC" ]
|
81 |
+
then check_path "$1"||(mkdir -p "$(dirname "$1")" && echo -e '\nset -U fish_user_paths "$HOME/.local/bin"' >> "$1")
|
82 |
+
else check_path "$1"||echo -e '\nexport PATH="$HOME/.local/bin:$PATH"' >> "$1"
|
83 |
+
fi
|
84 |
+
}
|
85 |
+
F_RC="$HOME/.config/fish/config.fish"
|
86 |
+
B_RC="$HOME/.bashrc"
|
87 |
+
Z_RC="$HOME/.zshrc"
|
88 |
if [ "$1" == "force" ]
|
89 |
then QUIET_MODE=1 uninstall_lw force
|
90 |
else QUIET_MODE=1 uninstall_lw update
|
91 |
fi
|
92 |
+
grep -m1 '^Exec=".*"' -lr ./*|\
|
93 |
+
xargs -d'\n' sed -i "s|^Exec=\".*\"|Exec=\"$LWRUN\"|g" 2>/dev/null
|
94 |
+
install -Dm644 LuxWine.menu "$HOME/.config/menus/applications-merged/LuxWine.menu"
|
95 |
+
if [ "$KDE_SESSION_VERSION" == 6 ]
|
96 |
+
then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kio/servicemenus/LuxWineService.desktop"
|
97 |
+
elif [ "$KDE_SESSION_VERSION" == 5 ]
|
98 |
+
then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kservices5/ServiceMenus/LuxWineService.desktop"
|
99 |
+
fi
|
100 |
+
mkdir -p "$MENU_APPS_DIR"
|
101 |
+
mkdir -p "$HOME_DESK_DIRS"
|
102 |
+
cp -rf mime "$HOME/.local/share/mime"
|
103 |
+
cp -rf applications "$MENU_APPS_DIR/LuxWine"
|
104 |
+
cp -rf directories/* "$HOME_DESK_DIRS/"
|
105 |
+
RSTEAM_DESKF="$RUNROOTFS/usr/share/applications/steam.desktop"
|
106 |
+
if [[ -d "$RUNROOTFS" && -f "$RSTEAM_DESKF" ]]
|
107 |
then
|
108 |
+
cp -rf "$RSTEAM_DESKF" "$HSTEAM_DESKF"
|
109 |
+
sed -i "s|^Exec.*steam-runtime|Exec='$HBIN_DIR/steam-runtime'|g" "$HSTEAM_DESKF"
|
110 |
+
sed -i "s|^Name=Steam (Runtime)|Name=Steam (RunImage LW)|g" "$HSTEAM_DESKF"
|
111 |
+
HICNSTM="$HOME_ICONS/steam.png"
|
112 |
+
for hi_icon_size in ${HICOLOR_SIZES[@]}
|
113 |
+
do
|
114 |
+
HICONS_DIR="$HOME_ICONS/hicolor/$hi_icon_size/apps"
|
115 |
+
RSTEAM_ICON="$RUNROOTFS/usr/share/icons/hicolor/$hi_icon_size/apps/steam.png"
|
116 |
+
HSTEAM_ICON="$HICONS_DIR/steam.png"
|
117 |
+
if [[ -f "$RSTEAM_ICON" && ! -f "$HSTEAM_ICON" ]]
|
118 |
+
then
|
119 |
+
mkdir -p "$HICONS_DIR"
|
120 |
+
[ -L "$HSTEAM_ICON" ] && \
|
121 |
+
rm -f "$HSTEAM_ICON"
|
122 |
+
cp -rf "$RSTEAM_ICON" "$HSTEAM_ICON"
|
123 |
+
fi
|
124 |
+
if [[ -f "$RSTEAM_ICON" && ! -f "$HICNSTM" ]]
|
125 |
+
then
|
126 |
+
mkdir -p "$HOME_ICONS"
|
127 |
+
[ -L "$HICNSTM" ] && \
|
128 |
+
rm -f "$HICNSTM"
|
129 |
+
cp -rf "$RSTEAM_ICON" "$HICNSTM"
|
130 |
+
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
done
|
132 |
fi
|
133 |
+
[ "$INSIDE_RUNIMAGE" == 1 ] && \
|
134 |
+
local INSTALL_SHELL="$(hostexec printenv SHELL)"||\
|
135 |
+
local INSTALL_SHELL="$SHELL"
|
136 |
+
case "$(basename "$INSTALL_SHELL")" in
|
137 |
+
zsh) add_path "$Z_RC" ;;
|
138 |
+
bash) add_path "$B_RC" ;;
|
139 |
+
fish) add_path "$F_RC" ;;
|
140 |
+
esac
|
141 |
+
update-desktop-database -q "$MENU_APPS_DIR" &>/dev/null
|
142 |
+
update-mime-database "$HOME/.local/share/mime" &>/dev/null
|
143 |
+
for mimetype in "${LW_MIMETYPES[@]}"
|
144 |
+
do xdg-mime default LuxWine.desktop "$mimetype" &>/dev/null
|
145 |
+
done
|
146 |
cp -rf registry_patch "$LW_DIR/"
|
147 |
cp -rf LICENSE "$LW_DIR/"
|
148 |
cp -rf themes "$LW_DIR/"
|
149 |
cp -rf icons "$LW_DIR/"
|
150 |
cp -rf gif "$LW_DIR/"
|
151 |
cp -rf db "$LW_DIR/"
|
152 |
+
LWRUNTIME="/opt/lwrap/runtime.tar.zst"
|
153 |
if [ -f "$LWRUNTIME" ]
|
154 |
then
|
155 |
+
TMP_LW_CFG="$LW_DIR/tmp/luwine.wcfg"
|
156 |
tar -xf "$LWRUNTIME" -C "$LW_DIR" && \
|
157 |
[[ ! -f "$LW_CFG" && -f "$TMP_LW_CFG" ]] && \
|
158 |
cp -f "$TMP_LW_CFG" "$LW_CFG"
|
159 |
fi
|
160 |
+
grep "$OLDLWRAP" -lr "$MENU_APPS_DIR"|\
|
161 |
+
xargs -d'\n' sed -i "s|$OLDLWRAP|$LWRUN|g" 2>/dev/null
|
|
|
|
|
162 |
}
|
163 |
|
164 |
mv_lwrun() {
|
|
|
169 |
fi
|
170 |
}
|
171 |
|
|
|
|
|
|
|
|
|
|
|
172 |
try_install_lwrun() {
|
173 |
+
readrealpath() {
|
174 |
+
if is_exe_exist readlink
|
175 |
+
then readlink -f "$@" 2>/dev/null
|
176 |
+
elif is_exe_exist realpath
|
177 |
+
then realpath "$@" 2>/dev/null
|
178 |
+
else return 1
|
179 |
+
fi
|
180 |
+
}
|
181 |
+
ln_lwrun() {
|
182 |
+
mkdir -p "$HBIN_DIR"
|
183 |
+
if [ "$(readrealpath "$LWRUN_LN")" != "$LWRUN" ]
|
184 |
+
then
|
185 |
+
info_msg "Update lwrun link..."
|
186 |
+
ln -sf "$LWRUN" "$LWRUN_LN"
|
187 |
+
fi
|
188 |
+
for steam in {steam,steam-runtime,steam-native}
|
189 |
+
do
|
190 |
+
STEAM_LN="$HBIN_DIR/$steam"
|
191 |
+
if [ "$(readrealpath "$STEAM_LN")" != "$LWRUN" ]
|
192 |
+
then
|
193 |
+
info_msg "Update $steam link..."
|
194 |
+
ln -sf "$LWRUN" "$STEAM_LN"
|
195 |
+
fi
|
196 |
+
done
|
197 |
+
if [ "$(readrealpath "$RUNIMAGE_LW")" != "$LWRUN" ]
|
198 |
then
|
199 |
+
info_msg "Update runimage link..."
|
200 |
+
mkdir -p "$LWBIN_DIR"
|
201 |
+
ln -sf "$LWRUN" "$RUNIMAGE_LW"
|
202 |
+
ln -sf "$LWRUN" "$HBIN_DIR/runimage-lw"
|
203 |
fi
|
|
|
|
|
204 |
}
|
205 |
+
if [[ "$RUNSRC" =~ "lwrun" && -f "$REALRUNSRC" && "$LWLN_ONLY" != 1 && \
|
206 |
+
"$REALRUNSRC" != "$LWRUN" && ! "${REALRUNSRC,,}" =~ .*/(run$|cdrom/lwrun|sr[0-9]/lwrun)$ && \
|
207 |
+
! "$REALRUNSRC" =~ ^/(usr/bin|bin|opt)/lwrun$ ]]
|
208 |
then
|
209 |
+
info_msg "Installing lwrun..."
|
210 |
+
mkdir -p "$LWBIN_DIR"
|
211 |
+
if mv_lwrun "$REALRUNSRC" "$LWRUN"
|
|
|
212 |
then
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
ln_lwrun
|
214 |
+
info_msg "lwrun installed!"
|
215 |
+
try_shutdown_lw && \
|
216 |
+
return 0||return 1
|
217 |
+
else
|
218 |
+
error_msg "Failed to install lwrun!"
|
219 |
+
is_lwrun && \
|
220 |
+
return 1||exit 1
|
221 |
fi
|
222 |
+
elif [[ "$REALRUNSRC" != "$(readrealpath "$LWRUN")" ]] && \
|
223 |
+
[[ "${REALRUNSRC,,}" =~ .*/(run|cdrom.*/lwrun|sr[0-9]/lwrun)$ ||\
|
224 |
+
"$REALRUNSRC" =~ ^/(usr/bin|bin|opt)/lwrun$ || "$LWLN_ONLY" == 1 ]]
|
|
|
|
|
225 |
then
|
226 |
+
mkdir -p "$LWBIN_DIR"
|
227 |
+
ln -sf "$REALRUNSRC" "$LWRUN"
|
228 |
+
ln_lwrun
|
229 |
+
[ "$LWLN_ONLY" != 1 ] && \
|
230 |
+
return 0||exit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
fi
|
232 |
}
|
233 |
|
|
|
235 |
if [ "$1" == "force" ] || is_lw || is_lwrun
|
236 |
then
|
237 |
info_msg "Removing Lux Wine..."
|
238 |
+
rm -f "$HSTEAM_DESKF"
|
239 |
rm -rf "$MENU_APPS_DIR/LuxWine"
|
240 |
rm -rf "$HOME_DESK_DIRS/LuxWine"*
|
241 |
+
rm -f "$HOME/.config/menus/applications-merged/LuxWine.menu"
|
242 |
rm -rf "$HOME/.local/share/kservices5/ServiceMenus/LuxWine"*
|
243 |
rm -rf "$HOME/.local/share/kio/servicemenus/LuxWine"*
|
244 |
+
rm -f "$OLDLWRAP"
|
245 |
+
rm -f "$LWBIN_DIR/lux-wine"
|
246 |
+
rm -f "$LWBIN_DIR/bash"
|
247 |
+
rm -f "$LWBIN_DIR/lwexec"
|
248 |
+
rm -f "$HBIN_DIR/lwrap"
|
249 |
if [ "$1" == "update" ]
|
250 |
then
|
|
|
|
|
|
|
251 |
rm -rf "$LW_DIR/db"
|
252 |
rm -rf "$LW_DIR/gif"
|
253 |
rm -rf "$LW_DIR/icons"
|
254 |
rm -rf "$LW_DIR/themes"
|
255 |
+
rm -f "$LW_DIR/LICENSE"
|
256 |
+
rm -f "$LW_DIR/.lwcfgchksum"
|
257 |
rm -rf "$LW_DIR/registry_patch"
|
258 |
else
|
259 |
+
chmod u+rw -R "$LWBIN_DIR/overlayfs/lux-wine/workdir" 2>/dev/null
|
260 |
rm -rf "$LW_DIR"
|
261 |
+
rm -rf "$HOME/LuxWine"
|
262 |
rm -rf "$LWRUN_LN"
|
|
|
263 |
rm -rf "$HBIN_DIR/runimage-lw"
|
264 |
rm -rf "$MENU_APPS_DIR/LuxWine"*
|
265 |
rm -rf "$HOME/Desktop/LuxWine.desktop"
|
|
|
283 |
fi
|
284 |
}
|
285 |
|
286 |
+
is_lw() { [ -f "$MENU_APPS_DIR/LuxWine/LuxWine.desktop" ] ; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
|
288 |
+
is_old_lw() { [ -x "$LWBIN_DIR/lux-wine" ] ; }
|
289 |
|
290 |
is_lwrun() { [ -x "$LWRUN" ] ; }
|
291 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
install_lw() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
TMP_LW="/tmp/lux-wine.$RANDOM"
|
294 |
+
if [ -d "/opt/lwrap" ]
|
|
|
295 |
then
|
296 |
info_msg "Installing Lux Wine..."
|
297 |
+
(mkdir -p "$TMP_LW" && \
|
298 |
+
cp -rf "/opt/lwrap"/!(runtime.tar.zst|prefix_backups) "$TMP_LW" && \
|
299 |
+
cd "$TMP_LW" && \
|
300 |
+
make_install "$1"
|
301 |
+
[ -d "$TMP_LW" ] && rm -rf "$TMP_LW")
|
|
|
|
|
|
|
|
|
302 |
fi
|
303 |
if is_lw
|
304 |
then info_msg "Lux Wine installed!"
|
|
|
308 |
fi
|
309 |
}
|
310 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
311 |
try_dl_lwrun() {
|
312 |
+
try_dllwrun_mirror() {
|
313 |
+
local GIT_LWRUN_VERSION='continuous'
|
314 |
+
local GIT_LWRUN="https://github.com/VHSgunzo/lwrun/releases"
|
315 |
+
local GIT_HF_LWRUN="https://huggingface.co/lux-wine/lwrun/resolve/main/releases"
|
316 |
+
# YC_LWRUN="https://storage.yandexcloud.net/lwrun"
|
317 |
+
local lwrunurl=(
|
318 |
+
# "$YC_LWRUN/releases/$GIT_LWRUN_VERSION/lwrun"
|
319 |
+
"$GIT_HF_LWRUN/$GIT_LWRUN_VERSION/lwrun"
|
320 |
+
"$GIT_LWRUN/download/$GIT_LWRUN_VERSION/lwrun"
|
321 |
+
)
|
322 |
+
for url in "${lwrunurl[@]}"
|
323 |
+
do
|
324 |
+
try_dl "$url" "$TMP_LWRUN" && \
|
325 |
+
return 0
|
326 |
+
done
|
327 |
+
return 1
|
328 |
+
}
|
329 |
+
local ret=1
|
330 |
+
TMP_LWRUN="$LW_DIR/tmp/lwrun"
|
331 |
info_msg "Downloading lwrun..."
|
332 |
+
if try_dllwrun_mirror
|
|
|
|
|
333 |
then
|
334 |
info_msg "lwrun downloaded!"
|
335 |
+
chmod +x "$TMP_LWRUN"
|
336 |
+
exec "$TMP_LWRUN"
|
337 |
+
ret=0
|
338 |
else
|
339 |
error_msg "Failed to download lwrun!"
|
340 |
[ -f "$TMP_LWRUN" ] && \
|
341 |
rm -rf "$TMP_LWRUN"*
|
342 |
exit 1
|
343 |
fi
|
344 |
+
return $ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
}
|
346 |
|
347 |
yn_case() {
|
|
|
381 |
}
|
382 |
|
383 |
try_shutdown_lw() {
|
384 |
+
if [ -n "$(pgrep -fa lux-wine|grep -E "$LWSRC|$LW_DIR/bin/lux-wine"|grep -v grep)" ]
|
385 |
then
|
386 |
if [ "$FORCE_UPDATE" != 1 ]
|
387 |
then
|
|
|
406 |
|
407 |
no_color() { sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g" ; }
|
408 |
|
409 |
+
update_lwrun() (
|
410 |
+
local ret=1
|
411 |
if is_update "RunImage" "Do you want to check updates for RunImage packages?"
|
412 |
then
|
413 |
+
mkdir -p "$LWBIN_DIR"
|
414 |
+
date '+%y.%m.%d.%H%M%S' > "$PKGUPDFL"
|
415 |
+
[ "$NOT_TERM" == 1 ] && \
|
416 |
+
IN_TERM=(
|
417 |
+
"xterm" "-fa" "Monospace"
|
418 |
+
"-fs" "11" "-geometry" "130x45"
|
419 |
+
"-bg" "black" "-fg" "white" \
|
420 |
+
"-T" "Updating RunImage packages..." "-e"
|
421 |
+
)||unset IN_TERM
|
422 |
+
HOSTEXEC_ARGS=(hostexec env RIM_RUN_IN_ONE=0)
|
423 |
+
"${HOSTEXEC_ARGS[@]}" ls "$RUNIMAGE_LW" &>/dev/null||\
|
424 |
+
"${HOSTEXEC_ARGS[@]}" LWLN_ONLY=1 "$RUNSRC"
|
425 |
+
"${HOSTEXEC_ARGS[@]}" "$RUNIMAGE_LW" "${IN_TERM[@]}" rim-update
|
426 |
+
ret="$?"
|
427 |
fi
|
428 |
+
return $ret
|
429 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
430 |
|
431 |
is_exe_exist() { command -v "$@" &>/dev/null ; }
|
432 |
|
433 |
which_exe() { command -v "$@" ; }
|
434 |
|
435 |
check_url_stat_code() {
|
|
|
436 |
if is_exe_exist curl
|
437 |
then curl -sL -o /dev/null -I -w "%{http_code}" "$@" 2>/dev/null
|
438 |
elif is_exe_exist wget
|
|
|
510 |
fi
|
511 |
if is_url "$URL"
|
512 |
then
|
513 |
+
WGET_ARGS=(--no-check-certificate --content-disposition -t 3 -T 5 -w 0.5 "$URL" -O "$FILEDIR/$FILENAME")
|
514 |
[ ! -d "$FILEDIR" ] && \
|
515 |
mkdir -p "$FILEDIR"
|
516 |
if [[ "$NOT_TERM" == 1 && "$NO_DL_GUI" != 1 ]] && \
|
|
|
579 |
elif is_exe_exist curl
|
580 |
then
|
581 |
curl -R --progress-bar --insecure --fail -L "$URL" -o \
|
582 |
+
"$FILEDIR/$FILENAME" |& tr '\r' '\n'|\
|
583 |
sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g'|\
|
584 |
dl_progress
|
585 |
elif is_exe_exist wget2
|
|
|
622 |
fi
|
623 |
}
|
624 |
|
|
|
|
|
625 |
rm_broken_link() { find -L "$1" -type l -exec rm -rf {} \; 2>/dev/null ; }
|
626 |
|
627 |
+
try_update_old_lwrun() {
|
628 |
+
if [ "$RUNIMAGE_VERSION" == '0.39.1' ]
|
629 |
+
then
|
630 |
+
runimage_lw() {
|
631 |
+
[ "$NOT_TERM" != 1 ] && \
|
632 |
+
unset HOSTEXEC_IN_TERM||\
|
633 |
+
HOSTEXEC_IN_TERM=(
|
634 |
+
"xterm" "-fa" "Monospace"
|
635 |
+
"-fs" "11" "-geometry" "130x45"
|
636 |
+
"-bg" "black" "-fg" "white" \
|
637 |
+
"-T" "Updating RunImage packages..." "-e"
|
638 |
+
)
|
639 |
+
"${HOSTEXEC_IN_TERM[@]}" hostexec ptyspawn importenv '$RUNPID' \
|
640 |
+
env DONT_NOTIFY=1 NO_RPIDSMON=1 RIM_CMPRS_LVL=22 RIM_UPDATE_CLEANUP=1 \
|
641 |
+
"$RUNIMAGE_LW" "$@"
|
642 |
+
}
|
643 |
+
info_msg "Checking the lwrun update..."
|
644 |
+
if runimage_lw --rU
|
645 |
+
then FORCE_UPDATE=1 try_shutdown_lw
|
646 |
+
fi
|
647 |
+
date '+%y.%m.%d.%H%M%S' > "$PKGUPDFL"
|
648 |
+
return 1
|
649 |
fi
|
650 |
}
|
651 |
|
652 |
print_help() {
|
|
|
|
|
|
|
|
|
653 |
echo -e "
|
654 |
${RED}Usage:
|
655 |
$RED┌──[$GREEN$RUNUSER$YELLOW@$BLUE${RUNHOSTNAME}$RED]─[$GREEN$PWD$RED]
|
656 |
+
$RED└──╼ \$$GREEN lwrap ${BLUE}{args}
|
657 |
|
658 |
${BLUE}--lwrap-help $GREEN Show this usage info
|
659 |
${BLUE}--install $YELLOW{force|local}$GREEN Re/Install Lux Wine and lwrun
|
|
|
662 |
"
|
663 |
}
|
664 |
|
|
|
|
|
665 |
case "$1" in
|
666 |
+
--lwrap-help) print_help ; exit ;;
|
667 |
+
--uninstall ) uninstall_lw "$2" ; exit $? ;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
668 |
esac
|
669 |
|
670 |
+
if [ "$INSIDE_RUNIMAGE" == 1 ]
|
671 |
then
|
672 |
+
case "$1" in
|
673 |
+
--install ) try_install_lwrun
|
674 |
+
install_lw "$2"
|
675 |
+
try_update_old_lwrun
|
676 |
+
exit $? ;;
|
677 |
+
--update ) FORCE_UPDATE=1
|
678 |
+
update_lwrun
|
679 |
+
exit $? ;;
|
680 |
+
esac
|
681 |
try_install_lwrun
|
682 |
+
(! is_lw || is_old_lw) && install_lw
|
683 |
if [[ "$CHK_UPDATE" != 0 || "$FORCE_UPDATE" == 1 ]] && \
|
684 |
is_net_conn
|
685 |
then
|
686 |
+
if [[ ! -f "$(find "$PKGUPDFL" -mtime -$CHK_UPDATE \
|
|
|
|
|
|
|
|
|
|
|
687 |
-print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
|
688 |
then update_lwrun && exit $?
|
689 |
fi
|
690 |
fi
|
691 |
+
exec "$LWSRC" "$@"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
692 |
else
|
693 |
+
if [ -x "$LWRUN" ]
|
694 |
+
then exec "$LWRUN" "$@"
|
695 |
+
elif is_net_conn
|
696 |
+
then try_dl_lwrun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
697 |
else
|
698 |
+
error_msg "lwrun not found, download and install it first!"
|
699 |
+
exit 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
700 |
fi
|
701 |
fi
|
702 |
exit $?
|
lux-wine
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
#!/usr/bin/env bash
|
2 |
|
3 |
-
export LW_VERSION="0.
|
4 |
export LW_DEVELOPERS="VHSgunzo"
|
5 |
|
6 |
export RED='\033[1;91m'
|
@@ -59,7 +59,7 @@ OLD_LW_DIR="$HOME/.local/share/LutrisWine"
|
|
59 |
[ ! -n "$LW_NAME" ] && export LW_NAME="$(basename "$0")"
|
60 |
[ ! -n "$LW_DIR" ] && export LW_DIR="$HOME/.local/share/LuxWine"
|
61 |
[ ! -n "$LW_BIN_DIR" ] && export LW_BIN_DIR="$LW_DIR/bin"
|
62 |
-
[ ! -n "$
|
63 |
if [ ! -n "$LW_TRAY" ]
|
64 |
then
|
65 |
[ "$DESKTOP_SESSION" == "plasma" ] && \
|
@@ -1561,7 +1561,7 @@ create_shortcut() {
|
|
1561 |
SHRT_NAME="$SHRT_NAME ($(basename "$WINEPREFIX"))"
|
1562 |
DESKF="${LW_DEF_TMP}/${SHRT_NAME}.desktop"
|
1563 |
echo "[Desktop Entry]" > "$DESKF"
|
1564 |
-
(LW_SOURCE="$
|
1565 |
[[ "$1" =~ "'" ]] && \
|
1566 |
SHRTEXEPATH="\"$1\""||\
|
1567 |
SHRTEXEPATH="'$1'"
|
@@ -3770,11 +3770,11 @@ is_app_exist() {
|
|
3770 |
do
|
3771 |
[ -n "$(if [ -n "$args" ]
|
3772 |
then
|
3773 |
-
awk -v s="Exec='$
|
3774 |
-
awk -v s="Exec='$
|
3775 |
else
|
3776 |
-
awk -v s="Exec='$
|
3777 |
-
awk -v s="Exec='$
|
3778 |
fi|head -1)" ] && ret=0 && echo "$app" && break
|
3779 |
done
|
3780 |
return $ret
|
@@ -4160,13 +4160,11 @@ lu_help() {
|
|
4160 |
exit 1
|
4161 |
fi
|
4162 |
echo_help() {
|
4163 |
-
[[ "$RUNSRC" =~ "lwrun" ]] && \
|
4164 |
-
local LW_NAME="lwrap"
|
4165 |
echo -e "
|
4166 |
${GREEN}Lux Wine ${RED}v${LW_VERSION} ${GREEN}by $LW_DEVELOPERS
|
4167 |
${RED}Usage:
|
4168 |
$RED┌──[$GREEN$USER$YELLOW@$BLUE`uname -a|awk '{print$2}'`$RED]─[$GREEN$PWD$RED]
|
4169 |
-
$RED└──╼ \$$GREEN
|
4170 |
|
4171 |
${RED}-explorer $GREEN Wine explorer
|
4172 |
${RED}-cmd $GREEN Open CMD or open file in CMD
|
@@ -6915,44 +6913,6 @@ if [[ "$EUID" == 0 && "$ALLOW_ROOT" != 1 ]]
|
|
6915 |
print_error yad "Don't run Lux Wine as root!"
|
6916 |
exit 1
|
6917 |
else
|
6918 |
-
(if [[ "$RUNSRC" =~ "lwrun" ]]
|
6919 |
-
then
|
6920 |
-
lwait_fl="/tmp/.lwait.$RUNPID"
|
6921 |
-
[[ -f "$lwait_fl" && ! -d "/proc/$RUNPID" ]] && \
|
6922 |
-
rm -f "$lwait_fl"
|
6923 |
-
if [ ! -f "$lwait_fl" ]
|
6924 |
-
then
|
6925 |
-
find_processes() {
|
6926 |
-
processes="$(ls -l /proc/*/exe 2>/dev/null|grep ' ->')"
|
6927 |
-
for ps in "${IGNPS[@]}"
|
6928 |
-
do processes="$(grep -wv "$ps"<<<"$processes")"
|
6929 |
-
done
|
6930 |
-
}
|
6931 |
-
IGNPS=(
|
6932 |
-
'tee' 'ls' 'ssrv' 'cat' 'tini'
|
6933 |
-
'sleep' 'gamemoded' 'bash' 'grep'
|
6934 |
-
)
|
6935 |
-
find_processes
|
6936 |
-
wait_lwpids=100
|
6937 |
-
while [[ "$wait_lwpids" -gt 0 && \
|
6938 |
-
! -n "$processes" && -d "/proc/$LWPID" ]]
|
6939 |
-
do
|
6940 |
-
wait_lwpids="$(( $wait_lwpids - 1 ))"
|
6941 |
-
sleep 0.01 2>/dev/null
|
6942 |
-
find_processes
|
6943 |
-
done
|
6944 |
-
touch "$lwait_fl"
|
6945 |
-
while [[ -f "$lwait_fl" && \
|
6946 |
-
-n "$processes" && -d "/proc/$LWPID" ]]
|
6947 |
-
do
|
6948 |
-
sleep 1
|
6949 |
-
find_processes
|
6950 |
-
done
|
6951 |
-
rm -f "$lwait_fl"
|
6952 |
-
sleep 0.5
|
6953 |
-
fi
|
6954 |
-
fi) 2>/dev/null &
|
6955 |
-
lwait_pid=$!
|
6956 |
lite_init "$@"
|
6957 |
case $1 in
|
6958 |
-init) full_init "$@" ;;
|
@@ -6992,4 +6952,3 @@ if [[ "$EUID" == 0 && "$ALLOW_ROOT" != 1 ]]
|
|
6992 |
*) lu_start "$@" ;;
|
6993 |
esac
|
6994 |
fi
|
6995 |
-
wait "$lwait_pid" &>/dev/null
|
|
|
1 |
#!/usr/bin/env bash
|
2 |
|
3 |
+
export LW_VERSION="0.80.1"
|
4 |
export LW_DEVELOPERS="VHSgunzo"
|
5 |
|
6 |
export RED='\033[1;91m'
|
|
|
59 |
[ ! -n "$LW_NAME" ] && export LW_NAME="$(basename "$0")"
|
60 |
[ ! -n "$LW_DIR" ] && export LW_DIR="$HOME/.local/share/LuxWine"
|
61 |
[ ! -n "$LW_BIN_DIR" ] && export LW_BIN_DIR="$LW_DIR/bin"
|
62 |
+
[ ! -n "$LWRUN" ] && export LWRUN="$LW_BIN_DIR/lwrun"
|
63 |
if [ ! -n "$LW_TRAY" ]
|
64 |
then
|
65 |
[ "$DESKTOP_SESSION" == "plasma" ] && \
|
|
|
1561 |
SHRT_NAME="$SHRT_NAME ($(basename "$WINEPREFIX"))"
|
1562 |
DESKF="${LW_DEF_TMP}/${SHRT_NAME}.desktop"
|
1563 |
echo "[Desktop Entry]" > "$DESKF"
|
1564 |
+
(LW_SOURCE="$LWRUN"
|
1565 |
[[ "$1" =~ "'" ]] && \
|
1566 |
SHRTEXEPATH="\"$1\""||\
|
1567 |
SHRTEXEPATH="'$1'"
|
|
|
3770 |
do
|
3771 |
[ -n "$(if [ -n "$args" ]
|
3772 |
then
|
3773 |
+
awk -v s="Exec='$LWRUN' '$1' $args" '$0==s' "$app" 2>/dev/null
|
3774 |
+
awk -v s="Exec='$LWRUN' \"$1\" $args" '$0==s' "$app" 2>/dev/null
|
3775 |
else
|
3776 |
+
awk -v s="Exec='$LWRUN' '$1'" '$0==s' "$app" 2>/dev/null
|
3777 |
+
awk -v s="Exec='$LWRUN' \"$1\"" '$0==s' "$app" 2>/dev/null
|
3778 |
fi|head -1)" ] && ret=0 && echo "$app" && break
|
3779 |
done
|
3780 |
return $ret
|
|
|
4160 |
exit 1
|
4161 |
fi
|
4162 |
echo_help() {
|
|
|
|
|
4163 |
echo -e "
|
4164 |
${GREEN}Lux Wine ${RED}v${LW_VERSION} ${GREEN}by $LW_DEVELOPERS
|
4165 |
${RED}Usage:
|
4166 |
$RED┌──[$GREEN$USER$YELLOW@$BLUE`uname -a|awk '{print$2}'`$RED]─[$GREEN$PWD$RED]
|
4167 |
+
$RED└──╼ \$$GREEN lwrun $BLUE{lwrun arg} ${RED}blabla.exe $YELLOW{exe args}
|
4168 |
|
4169 |
${RED}-explorer $GREEN Wine explorer
|
4170 |
${RED}-cmd $GREEN Open CMD or open file in CMD
|
|
|
6913 |
print_error yad "Don't run Lux Wine as root!"
|
6914 |
exit 1
|
6915 |
else
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6916 |
lite_init "$@"
|
6917 |
case $1 in
|
6918 |
-init) full_init "$@" ;;
|
|
|
6952 |
*) lu_start "$@" ;;
|
6953 |
esac
|
6954 |
fi
|
|
lwrap/PKGBUILD
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
# Maintainer: VHSgunzo <vhsgunzo.github.io>
|
2 |
|
3 |
pkgname='lwrap'
|
4 |
-
pkgver='0.
|
5 |
-
pkgrel='
|
6 |
pkgdesc='Lux Wine wrapper for RunImage container'
|
7 |
arch=('x86_64')
|
8 |
url='https://github.com/VHSgunzo/lux-wine'
|
@@ -41,8 +41,8 @@ optdepends=(
|
|
41 |
'lib32-opencl-icd-loader' 'opencl-icd-loader'
|
42 |
'lib32-llvm' 'wine-prefix-dotnet'
|
43 |
)
|
44 |
-
source=('lwrap'
|
45 |
-
sha256sums=('SKIP'
|
46 |
install='lwrap.install'
|
47 |
|
48 |
shopt -s extglob
|
@@ -50,9 +50,9 @@ shopt -s extglob
|
|
50 |
package() {
|
51 |
install -dm755 "$pkgdir/usr/bin"
|
52 |
install -Dm755 "$pkgname" "$pkgdir/opt/$pkgname/bin/$pkgname"
|
53 |
-
install -Dm755 "lwexec" "$pkgdir/opt/$pkgname/bin/lwexec"
|
54 |
cp -ar --no-preserve=ownership "$(realpath ../../)"/!(.git*|$pkgname|lutris-wine) "$pkgdir/opt/$pkgname"
|
55 |
mv -f "$pkgdir/opt/$pkgname/lux-wine" "$pkgdir/opt/$pkgname/bin/lux-wine"
|
|
|
56 |
ln -sfr "$pkgdir/opt/$pkgname/bin/$pkgname" "$pkgdir/usr/bin/$pkgname"
|
57 |
mkdir -p "$pkgdir/usr"/{lib,lib32}
|
58 |
ln -sfr "$pkgdir/usr/lib/syslog-ng/libcef.so" "$pkgdir/usr/lib/libcef.so"
|
|
|
1 |
# Maintainer: VHSgunzo <vhsgunzo.github.io>
|
2 |
|
3 |
pkgname='lwrap'
|
4 |
+
pkgver='0.80'
|
5 |
+
pkgrel='1'
|
6 |
pkgdesc='Lux Wine wrapper for RunImage container'
|
7 |
arch=('x86_64')
|
8 |
url='https://github.com/VHSgunzo/lux-wine'
|
|
|
41 |
'lib32-opencl-icd-loader' 'opencl-icd-loader'
|
42 |
'lib32-llvm' 'wine-prefix-dotnet'
|
43 |
)
|
44 |
+
source=('lwrap')
|
45 |
+
sha256sums=('SKIP')
|
46 |
install='lwrap.install'
|
47 |
|
48 |
shopt -s extglob
|
|
|
50 |
package() {
|
51 |
install -dm755 "$pkgdir/usr/bin"
|
52 |
install -Dm755 "$pkgname" "$pkgdir/opt/$pkgname/bin/$pkgname"
|
|
|
53 |
cp -ar --no-preserve=ownership "$(realpath ../../)"/!(.git*|$pkgname|lutris-wine) "$pkgdir/opt/$pkgname"
|
54 |
mv -f "$pkgdir/opt/$pkgname/lux-wine" "$pkgdir/opt/$pkgname/bin/lux-wine"
|
55 |
+
ln -sfr "$pkgdir/opt/$pkgname/bin/lux-wine" "$pkgdir/usr/bin/lux-wine"
|
56 |
ln -sfr "$pkgdir/opt/$pkgname/bin/$pkgname" "$pkgdir/usr/bin/$pkgname"
|
57 |
mkdir -p "$pkgdir/usr"/{lib,lib32}
|
58 |
ln -sfr "$pkgdir/usr/lib/syslog-ng/libcef.so" "$pkgdir/usr/lib/libcef.so"
|
lwrap/lwexec
DELETED
@@ -1,109 +0,0 @@
|
|
1 |
-
#!/usr/bin/env bash
|
2 |
-
|
3 |
-
PATH="$PATH:$RUNSTATIC"
|
4 |
-
JOBNUMFL="$LWEXECFLDIR/job"
|
5 |
-
|
6 |
-
get_child_pids() {
|
7 |
-
local child_pids="$(ps --forest -o pid= -g $(ps -o sid= -p $1 2>/dev/null) 2>/dev/null)"
|
8 |
-
echo -e "$1\n$(ps -o pid=,cmd= -p $child_pids 2>/dev/null|sort -n|\
|
9 |
-
sed "0,/$1/d" 2>/dev/null|grep -Pv '\d+ sleep \d+'|awk '{print$1}')"|sort -nu
|
10 |
-
}
|
11 |
-
|
12 |
-
try_kill() {
|
13 |
-
ret=1
|
14 |
-
if [ -n "$1" ]
|
15 |
-
then
|
16 |
-
for pid in $1
|
17 |
-
do
|
18 |
-
trykillnum=1
|
19 |
-
while [[ -n "$pid" && -d "/proc/$pid" ]]
|
20 |
-
do
|
21 |
-
if [[ "$trykillnum" -le 3 ]]
|
22 |
-
then
|
23 |
-
kill -2 $pid 2>/dev/null
|
24 |
-
ret=$?
|
25 |
-
sleep 0.05
|
26 |
-
else
|
27 |
-
kill -9 $pid 2>/dev/null
|
28 |
-
ret=$?
|
29 |
-
wait $pid &>/dev/null
|
30 |
-
wait_pid "$pid"
|
31 |
-
fi
|
32 |
-
trykillnum="$(( $trykillnum + 1 ))"
|
33 |
-
done
|
34 |
-
done
|
35 |
-
fi
|
36 |
-
return $ret
|
37 |
-
}
|
38 |
-
|
39 |
-
wait_pid() {
|
40 |
-
if [ -n "$1" ]
|
41 |
-
then
|
42 |
-
if [ "$UNLIM_WAIT" == 1 ]
|
43 |
-
then
|
44 |
-
while [ -d "/proc/$1" ]; do sleep 0.1; done
|
45 |
-
else
|
46 |
-
[ -n "$2" ] && \
|
47 |
-
timeout="$2"||
|
48 |
-
timeout="100"
|
49 |
-
waittime=1
|
50 |
-
while [[ -d "/proc/$1" && "$waittime" -le "$timeout" ]]
|
51 |
-
do
|
52 |
-
sleep 0.01
|
53 |
-
waittime="$(( $waittime + 1 ))"
|
54 |
-
done
|
55 |
-
fi
|
56 |
-
fi
|
57 |
-
}
|
58 |
-
|
59 |
-
killjobpids() { try_kill "$(get_child_pids "$execjobpid")" ; }
|
60 |
-
|
61 |
-
check_args_spaces() {
|
62 |
-
for arg in "$@"
|
63 |
-
do
|
64 |
-
(echo "$arg"|grep -Po '\s' &>/dev/null||\
|
65 |
-
echo "$arg"|grep -Eo '.*(.*|.*).*' &>/dev/null) && \
|
66 |
-
arg="$(echo "$arg"|sed 's|.*|"&"|' 2>/dev/null)"
|
67 |
-
args+=("$arg")
|
68 |
-
done
|
69 |
-
}
|
70 |
-
|
71 |
-
cleanup() { [[ -d "$execjobdir" && -n "$jobnum" ]] && rm -rf "$execjobdir" 2>/dev/null ; }
|
72 |
-
|
73 |
-
if [[ -d "$LWEXECFLDIR" && -e "$JOBNUMFL" ]]
|
74 |
-
then
|
75 |
-
trap 'killjobpids;cleanup' SIGINT SIGTERM
|
76 |
-
trap 'cleanup' EXIT
|
77 |
-
unset args
|
78 |
-
jobnum="$(cat "$JOBNUMFL" 2>/dev/null)"
|
79 |
-
if [ -n "$jobnum" ]
|
80 |
-
then
|
81 |
-
execjobdir="$LWEXECFLDIR/$jobnum"
|
82 |
-
execenvfl="$execjobdir/env"
|
83 |
-
execjobfl="$execjobdir/exec"
|
84 |
-
execjoboutfl="$execjobdir/out"
|
85 |
-
execjobstatfl="$execjobdir/stat"
|
86 |
-
export -p|\
|
87 |
-
grep -v 'SHELL='|\
|
88 |
-
grep -v 'DISPLAY='|\
|
89 |
-
grep -v 'XDG_DATA_DIRS='|\
|
90 |
-
grep -v 'XDG_CONFIG_DIRS='|\
|
91 |
-
grep -v 'XDG_RUNTIME_DIR='|\
|
92 |
-
grep -v 'DBUS_SESSION_BUS_ADDRESS=' \
|
93 |
-
> "$execenvfl" 2>/dev/null
|
94 |
-
if [ -n "$1" ]
|
95 |
-
then
|
96 |
-
check_args_spaces "$@"
|
97 |
-
echo "${args[@]}" > "$execjobfl"
|
98 |
-
else cat > "$execjobfl" 2>/dev/null
|
99 |
-
fi
|
100 |
-
execjobpid="$(cat "$execjobstatfl" 2>/dev/null)"
|
101 |
-
cat "$execjoboutfl" 2>/dev/null
|
102 |
-
execstat="$(cat "$execjobstatfl" 2>/dev/null)"
|
103 |
-
fi
|
104 |
-
[ -n "$execstat" ]||execstat=1
|
105 |
-
exit $execstat
|
106 |
-
else
|
107 |
-
echo "LWEXECFLDIR is not configured!"
|
108 |
-
exit 1
|
109 |
-
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lwrap/lwrap
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
#!/usr/bin/
|
2 |
# Lux Wine wrapper for RunImage container
|
3 |
|
4 |
shopt -s extglob
|
@@ -9,50 +9,20 @@ GREEN='\033[1;92m'
|
|
9 |
YELLOW='\033[1;33m'
|
10 |
RESETCOLOR='\033[1;00m'
|
11 |
|
12 |
-
# YC_S3="https://storage.yandexcloud.net"
|
13 |
-
GIT_REPO='https://github.com/VHSgunzo'
|
14 |
-
GIT_HF_REPO='https://huggingface.co/spaces/lux-wine'
|
15 |
-
# GIT_YC_REPO="$YC_S3/lux-wine"
|
16 |
LW_DIR="$HOME/.local/share/LuxWine"
|
17 |
MENU_APPS_DIR="$HOME/.local/share/applications"
|
18 |
-
LW_APPS_DIR="$MENU_APPS_DIR/LuxWineApps"
|
19 |
LW_CFG="$LW_DIR/luwine.wcfg"
|
20 |
-
TMP_LW_CFG="$LW_DIR/tmp/luwine.wcfg"
|
21 |
LWBIN_DIR="$LW_DIR/bin"
|
22 |
-
LWSRC=
|
23 |
-
GIT_RAW='https://raw.githubusercontent.com/VHSgunzo/lux-wine/main'
|
24 |
-
GIT_LWSRC="$GIT_RAW/lux-wine"
|
25 |
-
GIT_HF_LWSRC="$GIT_HF_REPO/git/resolve/main/lux-wine"
|
26 |
-
# GIT_YC_LWSRC="$GIT_YC_REPO/git/lux-wine"
|
27 |
-
GIT_LWZIP="$GIT_REPO/lux-wine/archive/refs/heads/main.zip"
|
28 |
-
GIT_HF_LWZIP="$GIT_HF_REPO/git/resolve/main/main.zip"
|
29 |
-
# GIT_YC_LWZIP="$GIT_YC_REPO/main.zip"
|
30 |
-
GIT_LWRAP="$GIT_RAW/lwrap/lwrap"
|
31 |
-
GIT_HF_LWRAP="$GIT_HF_REPO/git/resolve/main/lwrap/lwrap"
|
32 |
-
# GIT_YC_LWRAP="$GIT_YC_REPO/git/lwrap/lwrap"
|
33 |
-
GIT_LWRUN="$GIT_REPO/lwrun/releases"
|
34 |
-
GIT_HF_LWRUN="${GIT_HF_REPO//\/spaces/}/lwrun/resolve/main/releases"
|
35 |
-
# YC_LWRUN="$YC_S3/lwrun"
|
36 |
HOME_ICONS="$HOME/.local/share/icons"
|
37 |
HOME_DESK_DIRS="$HOME/.local/share/desktop-directories"
|
38 |
HSTEAM_DESKF="$MENU_APPS_DIR/steam-lw.desktop"
|
39 |
-
RSTEAM_DESKF="$RUNROOTFS/usr/share/applications/steam.desktop"
|
40 |
-
F_RC="$HOME/.config/fish/config.fish"
|
41 |
-
B_RC="$HOME/.bashrc"
|
42 |
-
Z_RC="$HOME/.zshrc"
|
43 |
HBIN_DIR="$HOME/.local/bin"
|
44 |
LWRUN_LN="$HBIN_DIR/lwrun"
|
45 |
-
|
46 |
-
LWRAP="$LWBIN_DIR/lwrap"
|
47 |
-
LWBASH="$LWBIN_DIR/bash"
|
48 |
LWRUN="$LWBIN_DIR/lwrun"
|
49 |
RUNIMAGE_LW="$LWBIN_DIR/runimage-lw"
|
50 |
-
|
51 |
-
LWRUNTIME="$LWRAP_DIR/runtime.tar.zst"
|
52 |
-
HLWDIRLN="$HOME/LuxWine"
|
53 |
-
LW_DEF_TMP="$LW_DIR/tmp"
|
54 |
-
LWRPIDFL="$LW_DEF_TMP/lwrpid"
|
55 |
-
LWEXEC="$LWBIN_DIR/lwexec"
|
56 |
HICOLOR_SIZES=(
|
57 |
"512x512" "256x256" "192x192" "128x128"
|
58 |
"96x96" "80x80" "72x72" "64x64" "48x48"
|
@@ -64,20 +34,12 @@ LW_MIMETYPES=(
|
|
64 |
'application/x-ms-shortcut' 'text/x-ms-regedit'
|
65 |
)
|
66 |
|
67 |
-
if [[ -n "$RUNSRC" && -d "$RUNROOTFS" ]] && \
|
68 |
-
[[ -x "$LWRAP" && "$NO_EXT_LWRAP" != 1 ]]
|
69 |
-
then
|
70 |
-
NO_EXT_LWRAP=1 "$LWRAP" "$@"
|
71 |
-
exit $?
|
72 |
-
fi
|
73 |
-
unset NO_EXT_LWRAP
|
74 |
-
|
75 |
CFG_CHK_UPDATE="$(grep '^CHK_UPDATE=.*$' "$LW_CFG" 2>/dev/null)"
|
76 |
[ -n "$CFG_CHK_UPDATE" ] && \
|
77 |
eval "$CFG_CHK_UPDATE"||\
|
78 |
CHK_UPDATE='3'
|
79 |
|
80 |
-
[ !
|
81 |
NOT_TERM=1||NOT_TERM=0
|
82 |
|
83 |
error_msg() {
|
@@ -107,124 +69,96 @@ warn_msg() {
|
|
107 |
fi
|
108 |
}
|
109 |
|
110 |
-
check_path() {
|
111 |
-
if [ "$1" == "$F_RC" ]
|
112 |
-
then grep -om1 '^set -U fish_user_paths "$HOME/.local/bin"' "$1" &>/dev/null
|
113 |
-
else grep -om1 '^export PATH=.*/.local/bin' "$1" &>/dev/null
|
114 |
-
fi
|
115 |
-
}
|
116 |
-
|
117 |
-
add_path() {
|
118 |
-
if [ "$1" == "$F_RC" ]
|
119 |
-
then check_path "$1"||(mkdir -p "$(dirname "$1")" && echo -e '\nset -U fish_user_paths "$HOME/.local/bin"' >> "$1")
|
120 |
-
else check_path "$1"||echo -e '\nexport PATH="$HOME/.local/bin:$PATH"' >> "$1"
|
121 |
-
fi
|
122 |
-
}
|
123 |
-
|
124 |
-
ln_lwrap() { [[ -x "$LWRAP" && -x "$LWRAP_LN" ]]||(mkdir -p "$HBIN_DIR" && ln -sfr "$LWRAP" "$LWRAP_LN") ; }
|
125 |
-
|
126 |
make_install() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
if [ "$1" == "force" ]
|
128 |
then QUIET_MODE=1 uninstall_lw force
|
129 |
else QUIET_MODE=1 uninstall_lw update
|
130 |
fi
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
then
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
install -Dm644 LuxWine.menu "$HOME/.config/menus/applications-merged/LuxWine.menu"
|
161 |
-
if [ "$KDE_SESSION_VERSION" == 6 ]
|
162 |
-
then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kio/servicemenus/LuxWineService.desktop"
|
163 |
-
elif [ "$KDE_SESSION_VERSION" == 5 ]
|
164 |
-
then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kservices5/ServiceMenus/LuxWineService.desktop"
|
165 |
-
fi
|
166 |
-
mkdir -p "$MENU_APPS_DIR"
|
167 |
-
mkdir -p "$HOME_DESK_DIRS"
|
168 |
-
cp -rf mime "$HOME/.local/share/mime"
|
169 |
-
cp -rf applications "$MENU_APPS_DIR/LuxWine"
|
170 |
-
cp -rf directories/* "$HOME_DESK_DIRS/"
|
171 |
-
if [[ -d "$RUNROOTFS" && -f "$RSTEAM_DESKF" ]]
|
172 |
-
then
|
173 |
-
cp -rf "$RSTEAM_DESKF" "$HSTEAM_DESKF"
|
174 |
-
sed -i "s|^Exec.*steam-runtime|Exec='$HBIN_DIR/steam-runtime'|g" "$HSTEAM_DESKF"
|
175 |
-
sed -i "s|^Name=Steam (Runtime)|Name=Steam (RunImage LW)|g" "$HSTEAM_DESKF"
|
176 |
-
HICNSTM="$HOME_ICONS/steam.png"
|
177 |
-
for hi_icon_size in ${HICOLOR_SIZES[@]}
|
178 |
-
do
|
179 |
-
HICONS_DIR="$HOME_ICONS/hicolor/$hi_icon_size/apps"
|
180 |
-
RSTEAM_ICON="$RUNROOTFS/usr/share/icons/hicolor/$hi_icon_size/apps/steam.png"
|
181 |
-
HSTEAM_ICON="$HICONS_DIR/steam.png"
|
182 |
-
if [[ -f "$RSTEAM_ICON" && ! -f "$HSTEAM_ICON" ]]
|
183 |
-
then
|
184 |
-
mkdir -p "$HICONS_DIR"
|
185 |
-
[ -L "$HSTEAM_ICON" ] && \
|
186 |
-
rm -f "$HSTEAM_ICON"
|
187 |
-
cp -rf "$RSTEAM_ICON" "$HSTEAM_ICON"
|
188 |
-
fi
|
189 |
-
if [[ -f "$RSTEAM_ICON" && ! -f "$HICNSTM" ]]
|
190 |
-
then
|
191 |
-
mkdir -p "$HOME_ICONS"
|
192 |
-
[ -L "$HICNSTM" ] && \
|
193 |
-
rm -f "$HICNSTM"
|
194 |
-
cp -rf "$RSTEAM_ICON" "$HICNSTM"
|
195 |
-
fi
|
196 |
-
done
|
197 |
-
fi
|
198 |
-
[ "$ENABLE_HOSTEXEC" == 1 ] && \
|
199 |
-
local INSTALL_SHELL="$(hostexec echo '$SHELL')"||\
|
200 |
-
local INSTALL_SHELL="$SHELL"
|
201 |
-
case "$(basename "$INSTALL_SHELL")" in
|
202 |
-
zsh) add_path "$Z_RC" ;;
|
203 |
-
bash) add_path "$B_RC" ;;
|
204 |
-
fish) add_path "$F_RC" ;;
|
205 |
-
esac
|
206 |
-
update-desktop-database -q "$MENU_APPS_DIR" &>/dev/null
|
207 |
-
update-mime-database "$HOME/.local/share/mime" &>/dev/null
|
208 |
-
for mimetype in "${LW_MIMETYPES[@]}"
|
209 |
-
do xdg-mime default LuxWine.desktop "$mimetype" &>/dev/null
|
210 |
done
|
211 |
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
212 |
cp -rf registry_patch "$LW_DIR/"
|
213 |
cp -rf LICENSE "$LW_DIR/"
|
214 |
cp -rf themes "$LW_DIR/"
|
215 |
cp -rf icons "$LW_DIR/"
|
216 |
cp -rf gif "$LW_DIR/"
|
217 |
cp -rf db "$LW_DIR/"
|
|
|
218 |
if [ -f "$LWRUNTIME" ]
|
219 |
then
|
|
|
220 |
tar -xf "$LWRUNTIME" -C "$LW_DIR" && \
|
221 |
[[ ! -f "$LW_CFG" && -f "$TMP_LW_CFG" ]] && \
|
222 |
cp -f "$TMP_LW_CFG" "$LW_CFG"
|
223 |
fi
|
224 |
-
grep "$
|
225 |
-
xargs -d'\n' sed -i "s|$
|
226 |
-
grep "$LWRUN" -lr "$MENU_APPS_DIR"|\
|
227 |
-
xargs -d'\n' sed -i "s|$LWRUN|$LWRAP|g" 2>/dev/null
|
228 |
}
|
229 |
|
230 |
mv_lwrun() {
|
@@ -235,80 +169,65 @@ mv_lwrun() {
|
|
235 |
fi
|
236 |
}
|
237 |
|
238 |
-
is_not_pts_home() {
|
239 |
-
[[ "$SANDBOX_HOME" != 1 && "$SANDBOX_HOME_DL" != 1 && ! -d "$SANDBOXHOMEDIR/lwrap" && \
|
240 |
-
"$PORTABLE_HOME" != 1 && "$TMP_HOME" != 1 && "$TMP_HOME_DL" != 1 && ! -d "$PORTABLEHOMEDIR/lwrap" ]]
|
241 |
-
}
|
242 |
-
|
243 |
try_install_lwrun() {
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
then
|
252 |
-
|
253 |
-
"$
|
|
|
|
|
254 |
fi
|
255 |
-
try_shutdown_lw && \
|
256 |
-
return 0||return 1
|
257 |
}
|
258 |
-
if
|
|
|
|
|
259 |
then
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
"$LWRUN_INSTALLED" != 1 ]]
|
264 |
then
|
265 |
-
info_msg "Installing lwrun..."
|
266 |
-
mkdir -p "$LWBIN_DIR"
|
267 |
-
if mv_lwrun "$RUNSRCRPTH" "$LWRUN"
|
268 |
-
then finalize_install
|
269 |
-
else
|
270 |
-
error_msg "Failed to install lwrun!"
|
271 |
-
is_lwrun && \
|
272 |
-
return 1||exit 1
|
273 |
-
fi
|
274 |
-
elif [[ "$RUNSRCRPTH" =~ "Run" && "$RUNSRCRPTH" != "$REALP_LWRUN" ]]
|
275 |
-
then
|
276 |
-
mkdir -p "$LWBIN_DIR"
|
277 |
-
ln -sf "$RUNSRCRPTH" "$LWRUN"
|
278 |
ln_lwrun
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
|
|
|
|
|
|
283 |
fi
|
284 |
-
|
285 |
-
}
|
286 |
-
|
287 |
-
ln_lwrun() {
|
288 |
-
if is_lwrun
|
289 |
then
|
290 |
-
mkdir -p "$
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
ln -sfr "$LWRUN" "$LWRUN_LN"
|
296 |
-
fi
|
297 |
-
for steam in {steam,steam-runtime,steam-native}
|
298 |
-
do
|
299 |
-
if [ ! -f "$HBIN_DIR/$steam" ]
|
300 |
-
then
|
301 |
-
info_msg "Update $steam link..."
|
302 |
-
ln -sfr "$LWRUN" "$HBIN_DIR/$steam"
|
303 |
-
fi
|
304 |
-
done
|
305 |
-
if [ "$(readrealpath "$RUNIMAGE_LW")" != "$REALP_LWRUN" ]
|
306 |
-
then
|
307 |
-
info_msg "Update runimage link..."
|
308 |
-
mkdir -p "$LWBIN_DIR"
|
309 |
-
ln -sfr "$LWRUN" "$RUNIMAGE_LW"
|
310 |
-
ln -sfr "$LWRUN" "$HBIN_DIR/runimage-lw"
|
311 |
-
fi
|
312 |
fi
|
313 |
}
|
314 |
|
@@ -316,29 +235,31 @@ uninstall_lw() {
|
|
316 |
if [ "$1" == "force" ] || is_lw || is_lwrun
|
317 |
then
|
318 |
info_msg "Removing Lux Wine..."
|
319 |
-
rm -
|
320 |
rm -rf "$MENU_APPS_DIR/LuxWine"
|
321 |
rm -rf "$HOME_DESK_DIRS/LuxWine"*
|
322 |
-
rm -
|
323 |
rm -rf "$HOME/.local/share/kservices5/ServiceMenus/LuxWine"*
|
324 |
rm -rf "$HOME/.local/share/kio/servicemenus/LuxWine"*
|
|
|
|
|
|
|
|
|
|
|
325 |
if [ "$1" == "update" ]
|
326 |
then
|
327 |
-
rm -rf "$LWSRC"
|
328 |
-
rm -rf "$LWRAP"
|
329 |
-
rm -rf "$LWBASH"
|
330 |
rm -rf "$LW_DIR/db"
|
331 |
rm -rf "$LW_DIR/gif"
|
332 |
rm -rf "$LW_DIR/icons"
|
333 |
rm -rf "$LW_DIR/themes"
|
334 |
-
rm -
|
335 |
-
rm -
|
336 |
rm -rf "$LW_DIR/registry_patch"
|
337 |
else
|
|
|
338 |
rm -rf "$LW_DIR"
|
339 |
-
rm -rf "$
|
340 |
rm -rf "$LWRUN_LN"
|
341 |
-
rm -rf "$LWRAP_LN"
|
342 |
rm -rf "$HBIN_DIR/runimage-lw"
|
343 |
rm -rf "$MENU_APPS_DIR/LuxWine"*
|
344 |
rm -rf "$HOME/Desktop/LuxWine.desktop"
|
@@ -362,68 +283,22 @@ is_net_conn() {
|
|
362 |
fi
|
363 |
}
|
364 |
|
365 |
-
|
366 |
-
if is_exe_exist unzip
|
367 |
-
then
|
368 |
-
unzip "$1" -d "$2" &>/dev/null
|
369 |
-
elif is_exe_exist 7z
|
370 |
-
then
|
371 |
-
7z x "$1" -o"$2" &>/dev/null
|
372 |
-
elif is_exe_exist bsdtar
|
373 |
-
then
|
374 |
-
mkdir -p "$2"
|
375 |
-
bsdtar -x -f "$1" -C "$2" &>/dev/null
|
376 |
-
else
|
377 |
-
error_msg "zip archivator not found!"
|
378 |
-
exit 1
|
379 |
-
fi
|
380 |
-
}
|
381 |
|
382 |
-
|
383 |
|
384 |
is_lwrun() { [ -x "$LWRUN" ] ; }
|
385 |
|
386 |
-
try_dl_lwzip() {
|
387 |
-
local lwzipurl=(
|
388 |
-
# "$GIT_YC_LWZIP"
|
389 |
-
"$GIT_HF_LWZIP"
|
390 |
-
"$GIT_LWZIP"
|
391 |
-
)
|
392 |
-
for url in "${lwzipurl[@]}"
|
393 |
-
do
|
394 |
-
try_dl "$url" "$TMP_LW.zip" && \
|
395 |
-
return 0
|
396 |
-
done
|
397 |
-
return 1
|
398 |
-
}
|
399 |
-
|
400 |
install_lw() {
|
401 |
-
install_local_lw() {
|
402 |
-
if [ -d "/opt/lwrap" ]
|
403 |
-
then
|
404 |
-
info_msg "Installing Lux Wine from container..."
|
405 |
-
(mkdir -p "$TMP_LW" && \
|
406 |
-
cp -rf "/opt/lwrap"/!(runtime.tar.zst|prefix_backups) "$TMP_LW" && \
|
407 |
-
cd "$TMP_LW" && \
|
408 |
-
make_install "$1"
|
409 |
-
rm_tmplw)
|
410 |
-
fi
|
411 |
-
}
|
412 |
-
rm_tmplw() { [[ -d "$TMP_LW" || -f "$TMP_LW.zip" ]] && rm -rf "$TMP_LW"* ; }
|
413 |
TMP_LW="/tmp/lux-wine.$RANDOM"
|
414 |
-
if [
|
415 |
-
is_net_conn
|
416 |
then
|
417 |
info_msg "Installing Lux Wine..."
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
rm_tmplw)
|
424 |
-
else install_local_lw "$1"
|
425 |
-
fi
|
426 |
-
else install_local_lw "$1"
|
427 |
fi
|
428 |
if is_lw
|
429 |
then info_msg "Lux Wine installed!"
|
@@ -433,167 +308,40 @@ install_lw() {
|
|
433 |
fi
|
434 |
}
|
435 |
|
436 |
-
vers_parser() { grep -Po '\d+'|sed ':a;/$/N;s/\n//;ta' ; }
|
437 |
-
|
438 |
-
set_git_lw_version() {
|
439 |
-
unset GIT_LW_VERSION
|
440 |
-
local lwsrcusrls=(
|
441 |
-
# "$GIT_YC_LWSRC"
|
442 |
-
"$GIT_HF_LWSRC"
|
443 |
-
"$GIT_LWSRC"
|
444 |
-
)
|
445 |
-
for url in "${lwsrcusrls[@]}"
|
446 |
-
do
|
447 |
-
GIT_LW_VERSION="$(NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 \
|
448 |
-
try_dl "$url" /dev/stdout 2>/dev/null|get_lw_version)"
|
449 |
-
[ -n "$GIT_LW_VERSION" ] && return 0
|
450 |
-
done
|
451 |
-
return 1
|
452 |
-
}
|
453 |
-
|
454 |
-
get_lw_version() {
|
455 |
-
if [ -n "$1" ]
|
456 |
-
then grep -m1 'LW_VERSION' "$1" 2>/dev/null|vers_parser
|
457 |
-
else grep -m1 'LW_VERSION'|vers_parser
|
458 |
-
fi
|
459 |
-
}
|
460 |
-
|
461 |
-
try_dllwrap_mirror() {
|
462 |
-
local lwrapurl=(
|
463 |
-
# "$GIT_YC_LWRAP"
|
464 |
-
"$GIT_HF_LWRAP"
|
465 |
-
"$GIT_LWRAP"
|
466 |
-
)
|
467 |
-
for url in "${lwrapurl[@]}"
|
468 |
-
do
|
469 |
-
try_dl "$url" "$TMP_LWRAP" && \
|
470 |
-
return 0
|
471 |
-
done
|
472 |
-
return 1
|
473 |
-
}
|
474 |
-
|
475 |
-
update_lwrap() {
|
476 |
-
info_msg "Update lwrap..."
|
477 |
-
TMP_LWRAP="${LWRAP}.new$BASHPID"
|
478 |
-
if try_dllwrap_mirror
|
479 |
-
then
|
480 |
-
mv -f "$TMP_LWRAP" "$LWRAP"
|
481 |
-
chmod +x "$LWRAP"
|
482 |
-
ln_lwrap
|
483 |
-
else
|
484 |
-
error_msg "Failed to get lwrap!"
|
485 |
-
return 1
|
486 |
-
fi
|
487 |
-
}
|
488 |
-
|
489 |
-
update_lw() {
|
490 |
-
if is_lw
|
491 |
-
then
|
492 |
-
info_msg "Checking the Lux Wine update..."
|
493 |
-
set_git_lw_version
|
494 |
-
LW_VERSION="$(get_lw_version "$LWSRC")"
|
495 |
-
if [[ -n "$GIT_LW_VERSION" && -n "$LW_VERSION" ]]
|
496 |
-
then
|
497 |
-
if [ "$LW_VERSION" != "$GIT_LW_VERSION" ]
|
498 |
-
then
|
499 |
-
if is_update "Lux Wine"
|
500 |
-
then
|
501 |
-
info_msg "Lux Wine update..."
|
502 |
-
if update_lwrap
|
503 |
-
then "$LWRAP" --install||\
|
504 |
-
exit 1
|
505 |
-
else exit 1
|
506 |
-
fi
|
507 |
-
fi
|
508 |
-
else
|
509 |
-
info_msg "The latest version is already installed!"
|
510 |
-
touch "$LWSRC"
|
511 |
-
fi
|
512 |
-
else
|
513 |
-
error_msg "Failed to check for updates!"
|
514 |
-
return 1
|
515 |
-
fi
|
516 |
-
else
|
517 |
-
error_msg "Lux Wine is not installed!"
|
518 |
-
exit 1
|
519 |
-
fi
|
520 |
-
}
|
521 |
-
|
522 |
-
get_lwrun_git_ver() {
|
523 |
-
NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl "$GIT_LWRUN/latest" \
|
524 |
-
/dev/stdout 2>/dev/null|grep -m1 "Release v.*"|awk '{print$2}'
|
525 |
-
}
|
526 |
-
|
527 |
-
get_lwrun_hf_ver() {
|
528 |
-
NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl \
|
529 |
-
"${GIT_HF_LWRUN/resolve/tree}" /dev/stdout \
|
530 |
-
2>/dev/null|grep -Po "v\d+\.\d+\.\d+"|tail -1
|
531 |
-
}
|
532 |
-
|
533 |
-
# get_lwrun_yc_ver() {
|
534 |
-
# NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl \
|
535 |
-
# "$YC_LWRUN" /dev/stdout 2>/dev/null|tr '<' '\n'|\
|
536 |
-
# grep '^Key>'|sed 's|^Key>||g'|grep '^releases'|\
|
537 |
-
# awk -F/ 'END {print$2}'
|
538 |
-
# }
|
539 |
-
|
540 |
-
set_git_lwrun_ver() {
|
541 |
-
# for src in yc git hf
|
542 |
-
for src in git hf
|
543 |
-
do
|
544 |
-
GIT_LWRUN_VERSION="$(get_lwrun_${src}_ver)"
|
545 |
-
[ -n "$GIT_LWRUN_VERSION" ] && return 0
|
546 |
-
done
|
547 |
-
return 1
|
548 |
-
}
|
549 |
-
|
550 |
-
try_dllwrun_mirror() {
|
551 |
-
local lwrunurl=(
|
552 |
-
# "$YC_LWRUN/releases/$GIT_LWRUN_VERSION/lwrun"
|
553 |
-
"$GIT_HF_LWRUN/$GIT_LWRUN_VERSION/lwrun"
|
554 |
-
"$GIT_LWRUN/download/$GIT_LWRUN_VERSION/lwrun"
|
555 |
-
)
|
556 |
-
for url in "${lwrunurl[@]}"
|
557 |
-
do
|
558 |
-
try_dl "$url" "$TMP_LWRUN" && \
|
559 |
-
return 0
|
560 |
-
done
|
561 |
-
return 1
|
562 |
-
}
|
563 |
-
|
564 |
try_dl_lwrun() {
|
565 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
info_msg "Downloading lwrun..."
|
567 |
-
|
568 |
-
if [ -n "$GIT_LWRUN_VERSION" ] && \
|
569 |
-
try_dllwrun_mirror
|
570 |
then
|
571 |
info_msg "lwrun downloaded!"
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
else
|
576 |
error_msg "Failed to download lwrun!"
|
577 |
[ -f "$TMP_LWRUN" ] && \
|
578 |
rm -rf "$TMP_LWRUN"*
|
579 |
exit 1
|
580 |
fi
|
581 |
-
|
582 |
-
|
583 |
-
runimage_lw() {
|
584 |
-
[ "$NOT_TERM" != 1 ] && \
|
585 |
-
unset HOSTEXEC_IN_TERM||\
|
586 |
-
HOSTEXEC_IN_TERM=(
|
587 |
-
"xterm" "-fa" "Monospace"
|
588 |
-
"-fs" "11" "-geometry" "130x45"
|
589 |
-
"-bg" "black" "-fg" "white" \
|
590 |
-
"-T" "Updating RunImage packages..." "-e"
|
591 |
-
)
|
592 |
-
if [ "$ENABLE_HOSTEXEC" == 1 ]
|
593 |
-
then "${HOSTEXEC_IN_TERM[@]}" hostexec ptyspawn importenv '$RUNPID' \
|
594 |
-
env DONT_NOTIFY=1 NO_RPIDSMON=1 "$RUNIMAGE_LW" "$@"
|
595 |
-
else "$RUNIMAGE_LW" "$@"
|
596 |
-
fi
|
597 |
}
|
598 |
|
599 |
yn_case() {
|
@@ -633,7 +381,7 @@ is_update() {
|
|
633 |
}
|
634 |
|
635 |
try_shutdown_lw() {
|
636 |
-
if [ -n "$(pgrep -fa lux-wine|grep -
|
637 |
then
|
638 |
if [ "$FORCE_UPDATE" != 1 ]
|
639 |
then
|
@@ -658,51 +406,33 @@ try_shutdown_lw() {
|
|
658 |
|
659 |
no_color() { sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g" ; }
|
660 |
|
661 |
-
|
|
|
662 |
if is_update "RunImage" "Do you want to check updates for RunImage packages?"
|
663 |
then
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
fi
|
679 |
-
|
680 |
-
|
681 |
-
update_lwrun() {
|
682 |
-
if is_lwrun
|
683 |
-
then
|
684 |
-
local ret=1
|
685 |
-
info_msg "Checking the lwrun update..."
|
686 |
-
if [ "$NO_RUNPKG_UPDATE" != 1 ]
|
687 |
-
then
|
688 |
-
update_runimage
|
689 |
-
ret=$?
|
690 |
-
[ "$ret" == 0 ] && \
|
691 |
-
lwrap_init
|
692 |
-
fi
|
693 |
-
return $ret
|
694 |
-
else
|
695 |
-
error_msg "lwrun is not installed!"
|
696 |
-
exit 1
|
697 |
-
fi
|
698 |
-
}
|
699 |
|
700 |
is_exe_exist() { command -v "$@" &>/dev/null ; }
|
701 |
|
702 |
which_exe() { command -v "$@" ; }
|
703 |
|
704 |
check_url_stat_code() {
|
705 |
-
set -o pipefail
|
706 |
if is_exe_exist curl
|
707 |
then curl -sL -o /dev/null -I -w "%{http_code}" "$@" 2>/dev/null
|
708 |
elif is_exe_exist wget
|
@@ -780,7 +510,7 @@ try_dl() {
|
|
780 |
fi
|
781 |
if is_url "$URL"
|
782 |
then
|
783 |
-
WGET_ARGS=(--no-check-certificate -t 3 -T 5 -w 0.5 "$URL" -O "$FILEDIR/$FILENAME")
|
784 |
[ ! -d "$FILEDIR" ] && \
|
785 |
mkdir -p "$FILEDIR"
|
786 |
if [[ "$NOT_TERM" == 1 && "$NO_DL_GUI" != 1 ]] && \
|
@@ -849,7 +579,7 @@ try_dl() {
|
|
849 |
elif is_exe_exist curl
|
850 |
then
|
851 |
curl -R --progress-bar --insecure --fail -L "$URL" -o \
|
852 |
-
"$FILEDIR/$FILENAME" |& tr '\r' '\n'
|
853 |
sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g'|\
|
854 |
dl_progress
|
855 |
elif is_exe_exist wget2
|
@@ -892,28 +622,38 @@ try_dl() {
|
|
892 |
fi
|
893 |
}
|
894 |
|
895 |
-
try_set_lwrpid() { lwrpid="$(cat "$LWRPIDFL" 2>/dev/null)" ; }
|
896 |
-
|
897 |
rm_broken_link() { find -L "$1" -type l -exec rm -rf {} \; 2>/dev/null ; }
|
898 |
|
899 |
-
|
900 |
-
if
|
901 |
-
then
|
902 |
-
|
903 |
-
|
904 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
905 |
fi
|
906 |
}
|
907 |
|
908 |
print_help() {
|
909 |
-
HLPHOSTNAME="$(uname -a|awk '{print$2}')"
|
910 |
-
[[ "$RUNSRC" =~ "lwrun" ]] && \
|
911 |
-
HLPEXENAME="lwrun"||\
|
912 |
-
HLPEXENAME="lwrap"
|
913 |
echo -e "
|
914 |
${RED}Usage:
|
915 |
$RED┌──[$GREEN$RUNUSER$YELLOW@$BLUE${RUNHOSTNAME}$RED]─[$GREEN$PWD$RED]
|
916 |
-
$RED└──╼ \$$GREEN
|
917 |
|
918 |
${BLUE}--lwrap-help $GREEN Show this usage info
|
919 |
${BLUE}--install $YELLOW{force|local}$GREEN Re/Install Lux Wine and lwrun
|
@@ -922,112 +662,41 @@ print_help() {
|
|
922 |
"
|
923 |
}
|
924 |
|
925 |
-
RUNSRCRPTH="$(readrealpath "$RUNSRC")"
|
926 |
-
|
927 |
case "$1" in
|
928 |
-
--lwrap-help) print_help
|
929 |
-
|
930 |
-
--uninstall) uninstall_lw "$2"
|
931 |
-
exit $? ;;
|
932 |
-
--install) try_install_lwrun
|
933 |
-
is_lwrun||try_dl_lwrun
|
934 |
-
install_lw "$2"
|
935 |
-
exit $? ;;
|
936 |
-
--update) FORCE_UPDATE=1
|
937 |
-
update_lw
|
938 |
-
update_lwrun
|
939 |
-
exit $? ;;
|
940 |
esac
|
941 |
|
942 |
-
if [
|
943 |
then
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
944 |
try_install_lwrun
|
945 |
-
is_lw||install_lw
|
946 |
if [[ "$CHK_UPDATE" != 0 || "$FORCE_UPDATE" == 1 ]] && \
|
947 |
is_net_conn
|
948 |
then
|
949 |
-
if [[ ! -
|
950 |
-
-print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
|
951 |
-
then update_lw
|
952 |
-
fi
|
953 |
-
if is_not_pts_home && \
|
954 |
-
[[ ! -x "$(find "$LWRUN" -mtime -$CHK_UPDATE \
|
955 |
-print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
|
956 |
then update_lwrun && exit $?
|
957 |
fi
|
958 |
fi
|
959 |
-
|
960 |
-
then "$LWSRC" -init
|
961 |
-
else
|
962 |
-
try_set_lwrpid
|
963 |
-
if ! [[ -n "$lwrpid" && -f "/tmp/.bwinf.$lwrpid" && -d "/proc/$lwrpid" ]]
|
964 |
-
then
|
965 |
-
LWEXECFLDIR="/tmp/.lwexec.$RUNPID"
|
966 |
-
mkdir -p "$LW_DEF_TMP"
|
967 |
-
echo "$RUNPID" > "$LWRPIDFL" 2>/dev/null
|
968 |
-
(JOBNUMFL="$LWEXECFLDIR/job"
|
969 |
-
mkdir -p "$LWEXECFLDIR" 2>/dev/null
|
970 |
-
mkfifo "$JOBNUMFL" 2>/dev/null
|
971 |
-
unset jobnum
|
972 |
-
while [[ -d "/proc/$RUNPID" && -d "$LWEXECFLDIR" ]]
|
973 |
-
do
|
974 |
-
jobnum=$(( $jobnum + 1 ))
|
975 |
-
execjobdir="$LWEXECFLDIR/$jobnum"
|
976 |
-
execenvfl="$execjobdir/env"
|
977 |
-
execjobfl="$execjobdir/exec"
|
978 |
-
execjoboutfl="$execjobdir/out"
|
979 |
-
execjobstatfl="$execjobdir/stat"
|
980 |
-
mkdir "$execjobdir" 2>/dev/null
|
981 |
-
mkfifo "$execenvfl" 2>/dev/null
|
982 |
-
mkfifo "$execjobfl" 2>/dev/null
|
983 |
-
mkfifo "$execjoboutfl" 2>/dev/null
|
984 |
-
mkfifo "$execjobstatfl" 2>/dev/null
|
985 |
-
tee <<<"$jobnum" "$JOBNUMFL" &>/dev/null
|
986 |
-
if [ -e "$execjobfl" ]
|
987 |
-
then
|
988 |
-
(OLD_PATH="$PATH"
|
989 |
-
OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
|
990 |
-
source "$execenvfl" && cd "$PWD"
|
991 |
-
export PATH="$PATH:$OLD_PATH"
|
992 |
-
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OLD_LD_LIBRARY_PATH"
|
993 |
-
cat "$execjobfl" 2>/dev/null|"$RUNSTATIC/bash" &>"$execjoboutfl" &
|
994 |
-
execjobpid=$!
|
995 |
-
tee <<<"$execjobpid" "$execjobstatfl" &>/dev/null
|
996 |
-
wait $execjobpid 2>/dev/null
|
997 |
-
execstat=$?
|
998 |
-
tee <<<"$execstat" "$execjobstatfl" &>/dev/null) &
|
999 |
-
fi
|
1000 |
-
done) &
|
1001 |
-
fi
|
1002 |
-
"$LWSRC" "$@"
|
1003 |
-
[ -d "$LWEXECFLDIR" ] && \
|
1004 |
-
rm -rf "$LWEXECFLDIR"
|
1005 |
-
[ -f "$LWRPIDFL" ] && \
|
1006 |
-
rm -f "$LWRPIDFL"
|
1007 |
-
fi
|
1008 |
else
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
then
|
1013 |
-
LWEXECFLDIR="/tmp/.lwexec.$lwrpid" \
|
1014 |
-
NOT_TERM="$NOT_TERM" "$LWEXEC" "$LWSRC" "$@"
|
1015 |
-
elif [ -x "$LWRUN_LN" ]
|
1016 |
-
then "$LWRUN_LN" "$@"
|
1017 |
-
elif is_lwrun
|
1018 |
-
then "$LWRUN" "$@"
|
1019 |
-
elif [ -x "$(which_exe lwrun)" ]
|
1020 |
-
then "$(which_exe lwrun)" "$@"
|
1021 |
else
|
1022 |
-
|
1023 |
-
|
1024 |
-
update_lwrap
|
1025 |
-
try_dl_lwrun && \
|
1026 |
-
"$LWRUN"
|
1027 |
-
else
|
1028 |
-
error_msg "lwrun not found, download and install it first!"
|
1029 |
-
exit 1
|
1030 |
-
fi
|
1031 |
fi
|
1032 |
fi
|
1033 |
exit $?
|
|
|
1 |
+
#!/usr/bin/bash
|
2 |
# Lux Wine wrapper for RunImage container
|
3 |
|
4 |
shopt -s extglob
|
|
|
9 |
YELLOW='\033[1;33m'
|
10 |
RESETCOLOR='\033[1;00m'
|
11 |
|
|
|
|
|
|
|
|
|
12 |
LW_DIR="$HOME/.local/share/LuxWine"
|
13 |
MENU_APPS_DIR="$HOME/.local/share/applications"
|
|
|
14 |
LW_CFG="$LW_DIR/luwine.wcfg"
|
|
|
15 |
LWBIN_DIR="$LW_DIR/bin"
|
16 |
+
LWSRC='/opt/lwrap/bin/lux-wine'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
HOME_ICONS="$HOME/.local/share/icons"
|
18 |
HOME_DESK_DIRS="$HOME/.local/share/desktop-directories"
|
19 |
HSTEAM_DESKF="$MENU_APPS_DIR/steam-lw.desktop"
|
|
|
|
|
|
|
|
|
20 |
HBIN_DIR="$HOME/.local/bin"
|
21 |
LWRUN_LN="$HBIN_DIR/lwrun"
|
22 |
+
OLDLWRAP="$LWBIN_DIR/lwrap"
|
|
|
|
|
23 |
LWRUN="$LWBIN_DIR/lwrun"
|
24 |
RUNIMAGE_LW="$LWBIN_DIR/runimage-lw"
|
25 |
+
PKGUPDFL="$LWBIN_DIR/.update"
|
|
|
|
|
|
|
|
|
|
|
26 |
HICOLOR_SIZES=(
|
27 |
"512x512" "256x256" "192x192" "128x128"
|
28 |
"96x96" "80x80" "72x72" "64x64" "48x48"
|
|
|
34 |
'application/x-ms-shortcut' 'text/x-ms-regedit'
|
35 |
)
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
CFG_CHK_UPDATE="$(grep '^CHK_UPDATE=.*$' "$LW_CFG" 2>/dev/null)"
|
38 |
[ -n "$CFG_CHK_UPDATE" ] && \
|
39 |
eval "$CFG_CHK_UPDATE"||\
|
40 |
CHK_UPDATE='3'
|
41 |
|
42 |
+
[[ ! "$(LANG= tty|grep -v 'not a')" =~ tty|pts ]] && \
|
43 |
NOT_TERM=1||NOT_TERM=0
|
44 |
|
45 |
error_msg() {
|
|
|
69 |
fi
|
70 |
}
|
71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
make_install() {
|
73 |
+
add_path() {
|
74 |
+
check_path() {
|
75 |
+
if [ "$1" == "$F_RC" ]
|
76 |
+
then grep -om1 '^set -U fish_user_paths "$HOME/.local/bin"' "$1" &>/dev/null
|
77 |
+
else grep -om1 '^export PATH=.*/.local/bin' "$1" &>/dev/null
|
78 |
+
fi
|
79 |
+
}
|
80 |
+
if [ "$1" == "$F_RC" ]
|
81 |
+
then check_path "$1"||(mkdir -p "$(dirname "$1")" && echo -e '\nset -U fish_user_paths "$HOME/.local/bin"' >> "$1")
|
82 |
+
else check_path "$1"||echo -e '\nexport PATH="$HOME/.local/bin:$PATH"' >> "$1"
|
83 |
+
fi
|
84 |
+
}
|
85 |
+
F_RC="$HOME/.config/fish/config.fish"
|
86 |
+
B_RC="$HOME/.bashrc"
|
87 |
+
Z_RC="$HOME/.zshrc"
|
88 |
if [ "$1" == "force" ]
|
89 |
then QUIET_MODE=1 uninstall_lw force
|
90 |
else QUIET_MODE=1 uninstall_lw update
|
91 |
fi
|
92 |
+
grep -m1 '^Exec=".*"' -lr ./*|\
|
93 |
+
xargs -d'\n' sed -i "s|^Exec=\".*\"|Exec=\"$LWRUN\"|g" 2>/dev/null
|
94 |
+
install -Dm644 LuxWine.menu "$HOME/.config/menus/applications-merged/LuxWine.menu"
|
95 |
+
if [ "$KDE_SESSION_VERSION" == 6 ]
|
96 |
+
then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kio/servicemenus/LuxWineService.desktop"
|
97 |
+
elif [ "$KDE_SESSION_VERSION" == 5 ]
|
98 |
+
then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kservices5/ServiceMenus/LuxWineService.desktop"
|
99 |
+
fi
|
100 |
+
mkdir -p "$MENU_APPS_DIR"
|
101 |
+
mkdir -p "$HOME_DESK_DIRS"
|
102 |
+
cp -rf mime "$HOME/.local/share/mime"
|
103 |
+
cp -rf applications "$MENU_APPS_DIR/LuxWine"
|
104 |
+
cp -rf directories/* "$HOME_DESK_DIRS/"
|
105 |
+
RSTEAM_DESKF="$RUNROOTFS/usr/share/applications/steam.desktop"
|
106 |
+
if [[ -d "$RUNROOTFS" && -f "$RSTEAM_DESKF" ]]
|
107 |
then
|
108 |
+
cp -rf "$RSTEAM_DESKF" "$HSTEAM_DESKF"
|
109 |
+
sed -i "s|^Exec.*steam-runtime|Exec='$HBIN_DIR/steam-runtime'|g" "$HSTEAM_DESKF"
|
110 |
+
sed -i "s|^Name=Steam (Runtime)|Name=Steam (RunImage LW)|g" "$HSTEAM_DESKF"
|
111 |
+
HICNSTM="$HOME_ICONS/steam.png"
|
112 |
+
for hi_icon_size in ${HICOLOR_SIZES[@]}
|
113 |
+
do
|
114 |
+
HICONS_DIR="$HOME_ICONS/hicolor/$hi_icon_size/apps"
|
115 |
+
RSTEAM_ICON="$RUNROOTFS/usr/share/icons/hicolor/$hi_icon_size/apps/steam.png"
|
116 |
+
HSTEAM_ICON="$HICONS_DIR/steam.png"
|
117 |
+
if [[ -f "$RSTEAM_ICON" && ! -f "$HSTEAM_ICON" ]]
|
118 |
+
then
|
119 |
+
mkdir -p "$HICONS_DIR"
|
120 |
+
[ -L "$HSTEAM_ICON" ] && \
|
121 |
+
rm -f "$HSTEAM_ICON"
|
122 |
+
cp -rf "$RSTEAM_ICON" "$HSTEAM_ICON"
|
123 |
+
fi
|
124 |
+
if [[ -f "$RSTEAM_ICON" && ! -f "$HICNSTM" ]]
|
125 |
+
then
|
126 |
+
mkdir -p "$HOME_ICONS"
|
127 |
+
[ -L "$HICNSTM" ] && \
|
128 |
+
rm -f "$HICNSTM"
|
129 |
+
cp -rf "$RSTEAM_ICON" "$HICNSTM"
|
130 |
+
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
done
|
132 |
fi
|
133 |
+
[ "$INSIDE_RUNIMAGE" == 1 ] && \
|
134 |
+
local INSTALL_SHELL="$(hostexec printenv SHELL)"||\
|
135 |
+
local INSTALL_SHELL="$SHELL"
|
136 |
+
case "$(basename "$INSTALL_SHELL")" in
|
137 |
+
zsh) add_path "$Z_RC" ;;
|
138 |
+
bash) add_path "$B_RC" ;;
|
139 |
+
fish) add_path "$F_RC" ;;
|
140 |
+
esac
|
141 |
+
update-desktop-database -q "$MENU_APPS_DIR" &>/dev/null
|
142 |
+
update-mime-database "$HOME/.local/share/mime" &>/dev/null
|
143 |
+
for mimetype in "${LW_MIMETYPES[@]}"
|
144 |
+
do xdg-mime default LuxWine.desktop "$mimetype" &>/dev/null
|
145 |
+
done
|
146 |
cp -rf registry_patch "$LW_DIR/"
|
147 |
cp -rf LICENSE "$LW_DIR/"
|
148 |
cp -rf themes "$LW_DIR/"
|
149 |
cp -rf icons "$LW_DIR/"
|
150 |
cp -rf gif "$LW_DIR/"
|
151 |
cp -rf db "$LW_DIR/"
|
152 |
+
LWRUNTIME="/opt/lwrap/runtime.tar.zst"
|
153 |
if [ -f "$LWRUNTIME" ]
|
154 |
then
|
155 |
+
TMP_LW_CFG="$LW_DIR/tmp/luwine.wcfg"
|
156 |
tar -xf "$LWRUNTIME" -C "$LW_DIR" && \
|
157 |
[[ ! -f "$LW_CFG" && -f "$TMP_LW_CFG" ]] && \
|
158 |
cp -f "$TMP_LW_CFG" "$LW_CFG"
|
159 |
fi
|
160 |
+
grep "$OLDLWRAP" -lr "$MENU_APPS_DIR"|\
|
161 |
+
xargs -d'\n' sed -i "s|$OLDLWRAP|$LWRUN|g" 2>/dev/null
|
|
|
|
|
162 |
}
|
163 |
|
164 |
mv_lwrun() {
|
|
|
169 |
fi
|
170 |
}
|
171 |
|
|
|
|
|
|
|
|
|
|
|
172 |
try_install_lwrun() {
|
173 |
+
readrealpath() {
|
174 |
+
if is_exe_exist readlink
|
175 |
+
then readlink -f "$@" 2>/dev/null
|
176 |
+
elif is_exe_exist realpath
|
177 |
+
then realpath "$@" 2>/dev/null
|
178 |
+
else return 1
|
179 |
+
fi
|
180 |
+
}
|
181 |
+
ln_lwrun() {
|
182 |
+
mkdir -p "$HBIN_DIR"
|
183 |
+
if [ "$(readrealpath "$LWRUN_LN")" != "$LWRUN" ]
|
184 |
+
then
|
185 |
+
info_msg "Update lwrun link..."
|
186 |
+
ln -sf "$LWRUN" "$LWRUN_LN"
|
187 |
+
fi
|
188 |
+
for steam in {steam,steam-runtime,steam-native}
|
189 |
+
do
|
190 |
+
STEAM_LN="$HBIN_DIR/$steam"
|
191 |
+
if [ "$(readrealpath "$STEAM_LN")" != "$LWRUN" ]
|
192 |
+
then
|
193 |
+
info_msg "Update $steam link..."
|
194 |
+
ln -sf "$LWRUN" "$STEAM_LN"
|
195 |
+
fi
|
196 |
+
done
|
197 |
+
if [ "$(readrealpath "$RUNIMAGE_LW")" != "$LWRUN" ]
|
198 |
then
|
199 |
+
info_msg "Update runimage link..."
|
200 |
+
mkdir -p "$LWBIN_DIR"
|
201 |
+
ln -sf "$LWRUN" "$RUNIMAGE_LW"
|
202 |
+
ln -sf "$LWRUN" "$HBIN_DIR/runimage-lw"
|
203 |
fi
|
|
|
|
|
204 |
}
|
205 |
+
if [[ "$RUNSRC" =~ "lwrun" && -f "$REALRUNSRC" && "$LWLN_ONLY" != 1 && \
|
206 |
+
"$REALRUNSRC" != "$LWRUN" && ! "${REALRUNSRC,,}" =~ .*/(run$|cdrom/lwrun|sr[0-9]/lwrun)$ && \
|
207 |
+
! "$REALRUNSRC" =~ ^/(usr/bin|bin|opt)/lwrun$ ]]
|
208 |
then
|
209 |
+
info_msg "Installing lwrun..."
|
210 |
+
mkdir -p "$LWBIN_DIR"
|
211 |
+
if mv_lwrun "$REALRUNSRC" "$LWRUN"
|
|
|
212 |
then
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
ln_lwrun
|
214 |
+
info_msg "lwrun installed!"
|
215 |
+
try_shutdown_lw && \
|
216 |
+
return 0||return 1
|
217 |
+
else
|
218 |
+
error_msg "Failed to install lwrun!"
|
219 |
+
is_lwrun && \
|
220 |
+
return 1||exit 1
|
221 |
fi
|
222 |
+
elif [[ "$REALRUNSRC" != "$(readrealpath "$LWRUN")" ]] && \
|
223 |
+
[[ "${REALRUNSRC,,}" =~ .*/(run|cdrom.*/lwrun|sr[0-9]/lwrun)$ ||\
|
224 |
+
"$REALRUNSRC" =~ ^/(usr/bin|bin|opt)/lwrun$ || "$LWLN_ONLY" == 1 ]]
|
|
|
|
|
225 |
then
|
226 |
+
mkdir -p "$LWBIN_DIR"
|
227 |
+
ln -sf "$REALRUNSRC" "$LWRUN"
|
228 |
+
ln_lwrun
|
229 |
+
[ "$LWLN_ONLY" != 1 ] && \
|
230 |
+
return 0||exit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
fi
|
232 |
}
|
233 |
|
|
|
235 |
if [ "$1" == "force" ] || is_lw || is_lwrun
|
236 |
then
|
237 |
info_msg "Removing Lux Wine..."
|
238 |
+
rm -f "$HSTEAM_DESKF"
|
239 |
rm -rf "$MENU_APPS_DIR/LuxWine"
|
240 |
rm -rf "$HOME_DESK_DIRS/LuxWine"*
|
241 |
+
rm -f "$HOME/.config/menus/applications-merged/LuxWine.menu"
|
242 |
rm -rf "$HOME/.local/share/kservices5/ServiceMenus/LuxWine"*
|
243 |
rm -rf "$HOME/.local/share/kio/servicemenus/LuxWine"*
|
244 |
+
rm -f "$OLDLWRAP"
|
245 |
+
rm -f "$LWBIN_DIR/lux-wine"
|
246 |
+
rm -f "$LWBIN_DIR/bash"
|
247 |
+
rm -f "$LWBIN_DIR/lwexec"
|
248 |
+
rm -f "$HBIN_DIR/lwrap"
|
249 |
if [ "$1" == "update" ]
|
250 |
then
|
|
|
|
|
|
|
251 |
rm -rf "$LW_DIR/db"
|
252 |
rm -rf "$LW_DIR/gif"
|
253 |
rm -rf "$LW_DIR/icons"
|
254 |
rm -rf "$LW_DIR/themes"
|
255 |
+
rm -f "$LW_DIR/LICENSE"
|
256 |
+
rm -f "$LW_DIR/.lwcfgchksum"
|
257 |
rm -rf "$LW_DIR/registry_patch"
|
258 |
else
|
259 |
+
chmod u+rw -R "$LWBIN_DIR/overlayfs/lux-wine/workdir" 2>/dev/null
|
260 |
rm -rf "$LW_DIR"
|
261 |
+
rm -rf "$HOME/LuxWine"
|
262 |
rm -rf "$LWRUN_LN"
|
|
|
263 |
rm -rf "$HBIN_DIR/runimage-lw"
|
264 |
rm -rf "$MENU_APPS_DIR/LuxWine"*
|
265 |
rm -rf "$HOME/Desktop/LuxWine.desktop"
|
|
|
283 |
fi
|
284 |
}
|
285 |
|
286 |
+
is_lw() { [ -f "$MENU_APPS_DIR/LuxWine/LuxWine.desktop" ] ; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
|
288 |
+
is_old_lw() { [ -x "$LWBIN_DIR/lux-wine" ] ; }
|
289 |
|
290 |
is_lwrun() { [ -x "$LWRUN" ] ; }
|
291 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
install_lw() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
TMP_LW="/tmp/lux-wine.$RANDOM"
|
294 |
+
if [ -d "/opt/lwrap" ]
|
|
|
295 |
then
|
296 |
info_msg "Installing Lux Wine..."
|
297 |
+
(mkdir -p "$TMP_LW" && \
|
298 |
+
cp -rf "/opt/lwrap"/!(runtime.tar.zst|prefix_backups) "$TMP_LW" && \
|
299 |
+
cd "$TMP_LW" && \
|
300 |
+
make_install "$1"
|
301 |
+
[ -d "$TMP_LW" ] && rm -rf "$TMP_LW")
|
|
|
|
|
|
|
|
|
302 |
fi
|
303 |
if is_lw
|
304 |
then info_msg "Lux Wine installed!"
|
|
|
308 |
fi
|
309 |
}
|
310 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
311 |
try_dl_lwrun() {
|
312 |
+
try_dllwrun_mirror() {
|
313 |
+
local GIT_LWRUN_VERSION='continuous'
|
314 |
+
local GIT_LWRUN="https://github.com/VHSgunzo/lwrun/releases"
|
315 |
+
local GIT_HF_LWRUN="https://huggingface.co/lux-wine/lwrun/resolve/main/releases"
|
316 |
+
# YC_LWRUN="https://storage.yandexcloud.net/lwrun"
|
317 |
+
local lwrunurl=(
|
318 |
+
# "$YC_LWRUN/releases/$GIT_LWRUN_VERSION/lwrun"
|
319 |
+
"$GIT_HF_LWRUN/$GIT_LWRUN_VERSION/lwrun"
|
320 |
+
"$GIT_LWRUN/download/$GIT_LWRUN_VERSION/lwrun"
|
321 |
+
)
|
322 |
+
for url in "${lwrunurl[@]}"
|
323 |
+
do
|
324 |
+
try_dl "$url" "$TMP_LWRUN" && \
|
325 |
+
return 0
|
326 |
+
done
|
327 |
+
return 1
|
328 |
+
}
|
329 |
+
local ret=1
|
330 |
+
TMP_LWRUN="$LW_DIR/tmp/lwrun"
|
331 |
info_msg "Downloading lwrun..."
|
332 |
+
if try_dllwrun_mirror
|
|
|
|
|
333 |
then
|
334 |
info_msg "lwrun downloaded!"
|
335 |
+
chmod +x "$TMP_LWRUN"
|
336 |
+
exec "$TMP_LWRUN"
|
337 |
+
ret=0
|
338 |
else
|
339 |
error_msg "Failed to download lwrun!"
|
340 |
[ -f "$TMP_LWRUN" ] && \
|
341 |
rm -rf "$TMP_LWRUN"*
|
342 |
exit 1
|
343 |
fi
|
344 |
+
return $ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
}
|
346 |
|
347 |
yn_case() {
|
|
|
381 |
}
|
382 |
|
383 |
try_shutdown_lw() {
|
384 |
+
if [ -n "$(pgrep -fa lux-wine|grep -E "$LWSRC|$LW_DIR/bin/lux-wine"|grep -v grep)" ]
|
385 |
then
|
386 |
if [ "$FORCE_UPDATE" != 1 ]
|
387 |
then
|
|
|
406 |
|
407 |
no_color() { sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g" ; }
|
408 |
|
409 |
+
update_lwrun() (
|
410 |
+
local ret=1
|
411 |
if is_update "RunImage" "Do you want to check updates for RunImage packages?"
|
412 |
then
|
413 |
+
mkdir -p "$LWBIN_DIR"
|
414 |
+
date '+%y.%m.%d.%H%M%S' > "$PKGUPDFL"
|
415 |
+
[ "$NOT_TERM" == 1 ] && \
|
416 |
+
IN_TERM=(
|
417 |
+
"xterm" "-fa" "Monospace"
|
418 |
+
"-fs" "11" "-geometry" "130x45"
|
419 |
+
"-bg" "black" "-fg" "white" \
|
420 |
+
"-T" "Updating RunImage packages..." "-e"
|
421 |
+
)||unset IN_TERM
|
422 |
+
HOSTEXEC_ARGS=(hostexec env RIM_RUN_IN_ONE=0)
|
423 |
+
"${HOSTEXEC_ARGS[@]}" ls "$RUNIMAGE_LW" &>/dev/null||\
|
424 |
+
"${HOSTEXEC_ARGS[@]}" LWLN_ONLY=1 "$RUNSRC"
|
425 |
+
"${HOSTEXEC_ARGS[@]}" "$RUNIMAGE_LW" "${IN_TERM[@]}" rim-update
|
426 |
+
ret="$?"
|
427 |
fi
|
428 |
+
return $ret
|
429 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
430 |
|
431 |
is_exe_exist() { command -v "$@" &>/dev/null ; }
|
432 |
|
433 |
which_exe() { command -v "$@" ; }
|
434 |
|
435 |
check_url_stat_code() {
|
|
|
436 |
if is_exe_exist curl
|
437 |
then curl -sL -o /dev/null -I -w "%{http_code}" "$@" 2>/dev/null
|
438 |
elif is_exe_exist wget
|
|
|
510 |
fi
|
511 |
if is_url "$URL"
|
512 |
then
|
513 |
+
WGET_ARGS=(--no-check-certificate --content-disposition -t 3 -T 5 -w 0.5 "$URL" -O "$FILEDIR/$FILENAME")
|
514 |
[ ! -d "$FILEDIR" ] && \
|
515 |
mkdir -p "$FILEDIR"
|
516 |
if [[ "$NOT_TERM" == 1 && "$NO_DL_GUI" != 1 ]] && \
|
|
|
579 |
elif is_exe_exist curl
|
580 |
then
|
581 |
curl -R --progress-bar --insecure --fail -L "$URL" -o \
|
582 |
+
"$FILEDIR/$FILENAME" |& tr '\r' '\n'|\
|
583 |
sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g'|\
|
584 |
dl_progress
|
585 |
elif is_exe_exist wget2
|
|
|
622 |
fi
|
623 |
}
|
624 |
|
|
|
|
|
625 |
rm_broken_link() { find -L "$1" -type l -exec rm -rf {} \; 2>/dev/null ; }
|
626 |
|
627 |
+
try_update_old_lwrun() {
|
628 |
+
if [ "$RUNIMAGE_VERSION" == '0.39.1' ]
|
629 |
+
then
|
630 |
+
runimage_lw() {
|
631 |
+
[ "$NOT_TERM" != 1 ] && \
|
632 |
+
unset HOSTEXEC_IN_TERM||\
|
633 |
+
HOSTEXEC_IN_TERM=(
|
634 |
+
"xterm" "-fa" "Monospace"
|
635 |
+
"-fs" "11" "-geometry" "130x45"
|
636 |
+
"-bg" "black" "-fg" "white" \
|
637 |
+
"-T" "Updating RunImage packages..." "-e"
|
638 |
+
)
|
639 |
+
"${HOSTEXEC_IN_TERM[@]}" hostexec ptyspawn importenv '$RUNPID' \
|
640 |
+
env DONT_NOTIFY=1 NO_RPIDSMON=1 RIM_CMPRS_LVL=22 RIM_UPDATE_CLEANUP=1 \
|
641 |
+
"$RUNIMAGE_LW" "$@"
|
642 |
+
}
|
643 |
+
info_msg "Checking the lwrun update..."
|
644 |
+
if runimage_lw --rU
|
645 |
+
then FORCE_UPDATE=1 try_shutdown_lw
|
646 |
+
fi
|
647 |
+
date '+%y.%m.%d.%H%M%S' > "$PKGUPDFL"
|
648 |
+
return 1
|
649 |
fi
|
650 |
}
|
651 |
|
652 |
print_help() {
|
|
|
|
|
|
|
|
|
653 |
echo -e "
|
654 |
${RED}Usage:
|
655 |
$RED┌──[$GREEN$RUNUSER$YELLOW@$BLUE${RUNHOSTNAME}$RED]─[$GREEN$PWD$RED]
|
656 |
+
$RED└──╼ \$$GREEN lwrap ${BLUE}{args}
|
657 |
|
658 |
${BLUE}--lwrap-help $GREEN Show this usage info
|
659 |
${BLUE}--install $YELLOW{force|local}$GREEN Re/Install Lux Wine and lwrun
|
|
|
662 |
"
|
663 |
}
|
664 |
|
|
|
|
|
665 |
case "$1" in
|
666 |
+
--lwrap-help) print_help ; exit ;;
|
667 |
+
--uninstall ) uninstall_lw "$2" ; exit $? ;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
668 |
esac
|
669 |
|
670 |
+
if [ "$INSIDE_RUNIMAGE" == 1 ]
|
671 |
then
|
672 |
+
case "$1" in
|
673 |
+
--install ) try_install_lwrun
|
674 |
+
install_lw "$2"
|
675 |
+
try_update_old_lwrun
|
676 |
+
exit $? ;;
|
677 |
+
--update ) FORCE_UPDATE=1
|
678 |
+
update_lwrun
|
679 |
+
exit $? ;;
|
680 |
+
esac
|
681 |
try_install_lwrun
|
682 |
+
(! is_lw || is_old_lw) && install_lw
|
683 |
if [[ "$CHK_UPDATE" != 0 || "$FORCE_UPDATE" == 1 ]] && \
|
684 |
is_net_conn
|
685 |
then
|
686 |
+
if [[ ! -f "$(find "$PKGUPDFL" -mtime -$CHK_UPDATE \
|
|
|
|
|
|
|
|
|
|
|
687 |
-print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
|
688 |
then update_lwrun && exit $?
|
689 |
fi
|
690 |
fi
|
691 |
+
exec "$LWSRC" "$@"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
692 |
else
|
693 |
+
if [ -x "$LWRUN" ]
|
694 |
+
then exec "$LWRUN" "$@"
|
695 |
+
elif is_net_conn
|
696 |
+
then try_dl_lwrun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
697 |
else
|
698 |
+
error_msg "lwrun not found, download and install it first!"
|
699 |
+
exit 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
700 |
fi
|
701 |
fi
|
702 |
exit $?
|
lwrap/lwrap.install
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
pkg_tool() {
|
|
|
2 |
unset pacdblck_exist
|
3 |
pacdblck='/var/lib/pacman/db.lck'
|
4 |
if [ -f "$pacdblck" ]
|
@@ -7,8 +8,11 @@ pkg_tool() {
|
|
7 |
rm -f "$pacdblck"
|
8 |
fi
|
9 |
LANG= sh -c "$@"
|
10 |
-
|
11 |
-
|
|
|
|
|
|
|
12 |
}
|
13 |
export -f pkg_tool
|
14 |
|
@@ -31,12 +35,21 @@ export -f pkg_tool
|
|
31 |
## arg 1: the new package version
|
32 |
## arg 2: the old package version
|
33 |
post_upgrade() {
|
34 |
-
pac -Q zenity 2>/dev/null|grep -q '4
|
35 |
pkg_tool 'yes|sudo downgrade zenity=3.44.2'
|
36 |
|
37 |
pac -Q chromium &>/dev/null && \
|
38 |
pkg_tool 'yes|pac -Rsndd chromium'
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
return 0
|
41 |
}
|
42 |
|
|
|
1 |
pkg_tool() {
|
2 |
+
local ret=1
|
3 |
unset pacdblck_exist
|
4 |
pacdblck='/var/lib/pacman/db.lck'
|
5 |
if [ -f "$pacdblck" ]
|
|
|
8 |
rm -f "$pacdblck"
|
9 |
fi
|
10 |
LANG= sh -c "$@"
|
11 |
+
ret="$?"
|
12 |
+
if [ "$pacdblck_exist" == 1 ]
|
13 |
+
then touch "$pacdblck"
|
14 |
+
fi
|
15 |
+
return $ret
|
16 |
}
|
17 |
export -f pkg_tool
|
18 |
|
|
|
35 |
## arg 1: the new package version
|
36 |
## arg 2: the old package version
|
37 |
post_upgrade() {
|
38 |
+
pac -Q zenity 2>/dev/null|grep -q '4\.[0-9]\.[0-9]' && \
|
39 |
pkg_tool 'yes|sudo downgrade zenity=3.44.2'
|
40 |
|
41 |
pac -Q chromium &>/dev/null && \
|
42 |
pkg_tool 'yes|pac -Rsndd chromium'
|
43 |
|
44 |
+
pac -Q amdvlk &>/dev/null && \
|
45 |
+
pkg_tool 'yes|pac -Rsndd amdvlk'
|
46 |
+
|
47 |
+
pac -Q lib32-amdvlk &>/dev/null && \
|
48 |
+
pkg_tool 'yes|pac -Rsndd lib32-amdvlk'
|
49 |
+
|
50 |
+
pac -Q glibc-eac lib32-glibc-eac &>/dev/null||\
|
51 |
+
pkg_tool 'yes|pac -Sy glibc-eac lib32-glibc-eac'
|
52 |
+
|
53 |
return 0
|
54 |
}
|
55 |
|
main.zip
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:
|
3 |
-
size
|
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:7b4e0897a767a6a42511054580dec3323f8a9f24a4ea30a6c9449ea367fb77a8
|
3 |
+
size 586388
|