Reduce memory usage of FreeCAD and OrcaSlicer
FreeCAD
Main idea: Qt PySide compiles and embed QRC into huge xxx_rc.py, I dump data as bin file and use open().
And there's more you can strip, on my debian 13 these runs well.
curl -o FreeCAD.AppImage -L https://github.com/FreeCAD/FreeCAD/releases/download/1.1.0/FreeCAD_1.1.0-Linux-x86_64-py311.AppImage
chmod +x FreeCAD.AppImage
./FreeCAD.AppImage --appimage-extract
mv squashfs-root FreeCAD
cd FreeCAD
pushd usr ; rm -rf man fonts ssl ; popd
pushd usr/share ; rm -rf doc icons man mysql opencv4 wayland wayland-protocols ; popd
pushd usr/lib ; rm -rf cmake pkgconfig qt6/bin qt6/plugins/qmlls qt6/qml/QtQuick libQt6Quick* $(ls | grep -E "^(lib)?(LLVM|clang|openvino|avcodec|rav1e|dav1d|avif|x265|x264|aom|SvtAv1Enc|opencv|mysqlclient|pcl|proto(buf|c)|gtk|wayland)[\._-]") ; popd # vtk is used by mesh
pushd usr/lib/python3.11 ; rm -rf ensurepip ; popd
pushd usr/lib/python3.11/site-packages ; rm -rf OCC pandas scipy debugpy ifcopenshell pip ; popd
for entry in $(find -name "*_rc.py"); do
suffix="$(tail -n 8 $entry | tr "\n" "|")"
(tail -n +8 $entry | head -n -8 ; printf "with open(__file__+'.qrc_name.bin','wb')as f:\n f.write(qt_resource_name)\nwith open(__file__+'.qrc_struct.bin','wb')as f:\n f.write(qt_resource_struct)\nwith open(__file__+'.qrc_data.bin','wb')as f:\n f.write(qt_resource_data)\nexit()") > $entry.tmp
mv $entry.tmp $entry
usr/bin/python $entry
(printf "from PySide6 import QtCore\nwith open(__file__+'.qrc_name.bin','rb')as f:\n qt_resource_name=f.read()\nwith open(__file__+'.qrc_struct.bin','rb')as f:\n qt_resource_struct=f.read()\nwith open(__file__+'.qrc_data.bin','rb')as f:\n qt_resource_data=f.read()\n" ; echo "$suffix" | tr "|" "\n") > $entry
done
sed -i -e 's/export QT_QPA_PLATFORM=/# &/' -e 's/"${MAIN}"/exec &/' AppRun
QT_SCALE_FACTOR=1 QT_SCREEN_SCALE_FACTORS=1 QT_AUTO_SCREEN_SCALE_FACTOR=0 QT_ENABLE_HIGHDPI_SCALING=0 QT_FONT_DPI=120 XKB_CONFIG_ROOT=/usr/share/X11/xkb ./AppRun
# Menu > Edit > Preferences > Display > Use OpenGL VBO
# Wayland: https://github.com/FreeCAD/FreeCAD/issues/6068
# tar -c FreeCAD | xz -T2 -9e --block-size $(( $(tar -c FreeCAD | wc -c) / 2 + 64 )) > FreeCAD.tar.xz # see mkdebian, todo: a new post for 2 block xzBefore (left) and after (right):
To create the launcher icon:
cd FreeCAD
cat <<EOF > ~/.local/share/applications/freecad.desktop
[Desktop Entry]
Name=FreeCAD
Icon=$(pwd)/org.freecad.FreeCAD.svg
Exec=$(pwd)/main %F
Type=Application
Categories=Graphics;Science;Education;Engineering;X-CNC;
MimeType=application/x-extension-fcstd;model/obj;image/vnd.dwg;image/vnd.dxf;model/vnd.collada+xml;application/iges;model/iges;model/step;model/step+zip;model/stl;application/vnd.shp;model/vrml;
EOF
update-desktop-databaseOrcaSlicer
The custom font and homepage webview use lots of memory.
curl -o OrcaSlicer.AppImage -L https://github.com/OrcaSlicer/OrcaSlicer/releases/download/v2.4.2/OrcaSlicer_Linux_AppImage_Ubuntu2404_V2.4.2.AppImage
chmod +x OrcaSlicer.AppImage
./OrcaSlicer.AppImage --appimage-extract
mv squashfs-root OrcaSlicer
cd OrcaSlicer
# reduce memory usage a lot
rm -rf resources/hms resources/fonts
mv resources/web/homepage/index.html resources/web/homepage/index.html.bak
# force enable dark mode
export GTK_THEME=adw-gtk3-dark
export ORCA_SLICER_DARK_THEME=true
# kill webkit processes
(nohup sh -c 'sleep 3 ; kill $(pgrep -P $(pgrep orcaslicer_main))' > /dev/null 2>&1 &)
# apt install --no-install-recommends libwebkit2gtk-4.1-0 libglu1-mesa libmspack0t64 # for debian 13To create the launcher icon:
cd OrcaSlicer
cat <<EOF > ~/.local/share/applications/orcaslicer.desktop
[Desktop Entry]
Name=OrcaSlicer
Icon=$(pwd)/OrcaSlicer.png
Exec=$(pwd)/main %F
Type=Application
Categories=Utility;
MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;application/x-amf;
EOF
update-desktop-database