⭐ Aplicacions instal·lades no disponibles en servidor de Deepin

Firefox

Aquí tens el resum dels 5 passos que vam seguir per instal·lar Firefox 152.0.5 des de ~/Downloads/firefox-152.0.5.tar.xz:


1. Extreure el fitxer

cd ~/Downloads
tar -xf firefox-152.0.5.tar.xz

2. Moure la carpeta a /opt

sudo mv firefox /opt/firefox-152

3. Crear enllaç simbòlic al terminal

sudo ln -sf /opt/firefox-152/firefox /usr/local/bin/firefox

4. Crear l’accés directe al menú d’aplicacions

A ~/.local/share/applications/firefox.desktop amb les dades necessàries (nom, icona, executable, etc.).

5. Configurar el català

Des de about:preferencesGeneralIdioma, afegir Català com a idioma preferit.


Resultat: ✅ Firefox 152.0.5 instal·lat, funcional des del menú d’aplicacions i des del terminal.



Visual Studio Code


VLC


LibreOffice

com vull instal·lar la versió catalana


Enllaços ràpits


Synology assistant

Pas 1: Instal·lar el Synology Assistant

flatpak install flathub com.synology.SynologyAssistant

Pas 2: Executar l’aplicació

Un cop instal·lat, pots obrir-lo de dues maneres:

Des de la terminal:

flatpak run com.synology.SynologyAssistant

qBittorrent


Calibre

Restablir TOT Calibre als valors per defecte

Si vols restablir tota la configuració de Calibre, executa al terminal:

# Tanca Calibre primer!
mv ~/.config/calibre ~/.config/calibre.backup

Instal·lador oficial de Calibre (RECOMANAT)

Aquesta és la manera oficial que recomana el propi Calibre. Obre el terminal i executa:

sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin

Què fa aquesta comanda?

  • sudo -v: demana la contrasenya d’administrador
  • wget: descarrega l’script oficial d’instal·lació
  • sudo sh /dev/stdin: l’executa amb permisos de root

Un cop acabi, podràs obrir Calibre des del menú d’aplicacions o escrivint calibre al terminal.


Desinstal·lar calibre

sudo apt remove calibre

Visual Vode

Synology Assistan

backup_mut

correu electronic

Llibre d’0ffice


Backup_mut

Posar a l’escriptori backup_mut.txt . Aplicar aquesta comanda:

sudo cp /home/Miquel/Desktop/backup_mut-ok.txt /usr/local/bin/backup_mut

amb lsblk podem veure la estructura i les particions del sistema Deepin

Clar, aquí tens una descripció detallada de l’estructura de particions del teu sistema Deepin basant-me en la sortida de lsblk:


Disc sda – 476,9 GB (disc principal)

És el disc intern del sistema on hi ha Deepin instal·lat.

sda1 – 100 MB → /boot/efi

Partició EFI System Partition (ESP). Conté el carregador d’arrencada (bootloader) en format UEFI. És essencial per a l’inici del sistema.

sda2 – 16 MB

Partició Microsoft Reserved Partition (MSR). Reservada per Windows per a metadades internes. No té punt de muntatge.

sda3 – 346,4 GB → /media/Miquel/windows

Partició principal de Windows (probablement C:). Muntada en modo lectura/escriptura des de Deepin, la tens accés a /media/Miquel/windows.

sda4 – 1,2 GB

Partició de recuperació de Windows (WinRE). Conté eines per restaurar Windows en cas de fallada. No té punt de muntatge actiu.

sda5 – 129,3 GB → /var, /persistent/ostree, /ostree, /sysroot/ostree, /sysroot

Partició principal de Deepin (basada en OSTree). Això és típic de Deepin V23 o versions amb sistema immutable/atomic.

  • /var: Dades variables del sistema (logs, bases de dades, spool, etc.)
  • /ostree i /persistent/ostree: Sistema de desplegament OSTree (similar a una actualització atòmica).
  • /sysroot i /sysroot/ostree: Arrel del sistema operatiu (root filesystem).

Disc sdb – 57,7 GB (disc extern o USB)

sdb1 – 57,7 GB → /media/Miquel/backup

Dispositiu extraïble (la columna RM = 1 indica que és extraïble). Conté una única partició amb tot l’espai, muntada com a còpia de seguretat (backup).


Resum visual

sda (476,9 GB) ── Disc intern
├─ sda1 (100 MB)  → /boot/efi          → Arrencada UEFI
├─ sda2 (16 MB)   →                     → Reserva MSR (Windows)
├─ sda3 (346,4 GB)→ /media/Miquel/windows → Windows
├─ sda4 (1,2 GB)  →                     → Recuperació Windows
└─ sda5 (129,3 GB)→ /var, /ostree...   → Deepin (sistema OSTree)

sdb (57,7 GB)  ── Disc extraïble
└─ sdb1 (57,7 GB)→ /media/Miquel/backup  → Còpia de seguretat

Tens un sistema dual (Deepin + Windows) en el mateix disc, amb Deepin muntat sobre una estructura OSTree (sistema atòmic/immutable) i un disc extern dedicat a còpies de seguretat.

Fem un llistat de backup mut

$ cat -n /usr/local/bin/backup_mut

#!/bin/bash
# Indica al sistema que aquest fitxer s'ha d'executar amb l'intèrpret Bash.

# ==========================================
# 1. CONFIGURACIÓ INICIAL I COLORS
# ==========================================

VERMELL='\033[0;31m'
VERD='\033[0;32m'
GROC='\033[1;33m'
BLAU='\033[0;34m'
NC='\033[0m'

# Opcions base de rsync; s'hi afegeixen flags segons el sistema de fitxers del destí
RSYNC_OPTS="-avh --progress"

clear

# ==========================================
# 2. FUNCIONS DE DETECCIÓ I MUNTATGE DE DISCS
# ==========================================

# disc_sistema: nom del disc físic on viu el Deepin (ex: "sda").
disc_sistema() {
    local arrel
    arrel=$(findmnt -n -o SOURCE / 2>/dev/null)
    lsblk -ndo PKNAME "$arrel" 2>/dev/null | head -n 1
}

# detecta_discos: omple els vectors amb les particions (o discs sencers amb
# sistema de fitxers propi) de tots els discs que NO siguin el del sistema.
detecta_discos() {
    local sys part tipus disc mp mida label fst

    sys=$(disc_sistema)

    DISC_NOM=(); DISC_MIDA=(); DISC_ETIQUETA=(); DISC_MUNTATGE=(); DISC_MUNTAT=()
    NUM_DISCS=0

    while read -r part tipus; do
        if [ "$tipus" == "disk" ]; then
            disc=$(basename "$part")
        else
            disc=$(lsblk -ndo PKNAME "$part" 2>/dev/null | head -n 1)
        fi

        mp=$(lsblk -ndo MOUNTPOINT "$part" 2>/dev/null | head -n 1)
        fst=$(lsblk -ndo FSTYPE "$part"    2>/dev/null | head -n 1)

        # Mai el disc físic on viu el Deepin (ni les seves particions)
        [ "$disc" == "$sys" ] && continue
        # Descarta dispositius sense sistema de fitxers útil
        case "$fst" in
            ""|swap|crypto_LUKS) continue ;;
        esac
        # Descarta punts de muntatge propis del sistema operatiu
        case "$mp" in
            /|/boot|/boot/efi|/efi) continue ;;
        esac

        mida=$(lsblk -ndo SIZE "$part"  2>/dev/null | head -n 1)
        label=$(lsblk -ndo LABEL "$part" 2>/dev/null | head -n 1)

        NUM_DISCS=$((NUM_DISCS + 1))
        DISC_NOM[NUM_DISCS]="$part"
        DISC_MIDA[NUM_DISCS]="$mida"
        DISC_ETIQUETA[NUM_DISCS]="${label:-sense etiqueta}"
        DISC_MUNTATGE[NUM_DISCS]="$mp"
        if [ -n "$mp" ]; then
            DISC_MUNTAT[NUM_DISCS]="si"
        else
            DISC_MUNTAT[NUM_DISCS]="no"
        fi
    done < <(lsblk -nlp -o NAME,TYPE 2>/dev/null | awk '$2 == "part" || $2 == "disk" {print $1, $2}')
}

# munta_disc <índex>: monta la unitat amb udisksctl si cal (no cal sudo).
munta_disc() {
    local idx="$1" mp
    [ "${DISC_MUNTAT[$idx]}" == "si" ] && return 0

    if ! command -v udisksctl >/dev/null 2>&1; then
        echo -e "${VERMELL}udisksctl no disponible. Monta el disc des del gestor de fitxers.${NC}"
        return 1
    fi

    echo -e "${BLAU}Muntant ${DISC_NOM[$idx]}...${NC}"
    udisksctl mount -b "${DISC_NOM[$idx]}" >/dev/null 2>&1
    mp=$(lsblk -ndo MOUNTPOINT "${DISC_NOM[$idx]}" 2>/dev/null | head -n 1)

    if [ -n "$mp" ]; then
        DISC_MUNTATGE[$idx]="$mp"
        DISC_MUNTAT[$idx]="si"
        echo -e "${VERD}✓ Muntat a: $mp${NC}"
        return 0
    else
        echo -e "${VERMELL}No s'ha pogut muntar ${DISC_NOM[$idx]}.${NC}"
        echo "Monta'l des del gestor de fitxers i torna-ho a provar."
        return 1
    fi
}

# mostra_discos: llistat numerat d'unitats + estat de muntatge.
mostra_discos() {
    local i estat
    if [ "$NUM_DISCS" -eq 0 ]; then
        echo -e "  ${VERMELL}(cap)${NC} No s'ha detectat cap USB ni disc extern/intern."
    else
        for i in $(seq 1 "$NUM_DISCS"); do
            if [ "${DISC_MUNTAT[$i]}" == "si" ]; then
                estat="${VERD}muntat a ${DISC_MUNTATGE[$i]}${NC}"
            else
                estat="${GROC}no muntat (es muntarà en triar-lo)${NC}"
            fi
            echo -e "  ${VERD}$i${NC}) ${DISC_ETIQUETA[$i]} ${BLAU}[${DISC_NOM[$i]}, ${DISC_MIDA[$i]}]${NC} - $estat"
        done
    fi
}

# rsync_compat <dispositiu>: adapta les opcions de rsync al sistema de fitxers:
#  - ext4/btrfs/xfs: hardlinks (-H) I permisos/propietaris (clau per a ostree).
#  - ntfs: hardlinks sí, sense permisos Linux.
#  - exfat/vfat: ni hardlinks ni permisos.
rsync_compat() {
    local fst
    fst=$(lsblk -ndo FSTYPE "$1" 2>/dev/null | head -n 1)
    case "$fst" in
        ext2|ext3|ext4|btrfs|xfs) echo " -H" ;;
        ntfs)                     echo " -H --no-perms --no-owner --no-group" ;;
        *)                        echo " --no-perms --no-owner --no-group" ;;
    esac
}

# ajusta_rsync <ruta_desti>: determina el dispositiu de destí i afegeix els
# flags adequats a RSYNC_OPTS.
ajusta_rsync() {
    local ruta="$1" i disc_desti=""
    for i in $(seq 1 "$NUM_DISCS"); do
        case "$ruta" in
            "${DISC_MUNTATGE[$i]}"*) disc_desti="${DISC_NOM[$i]}"; break ;;
        esac
    done
    RSYNC_OPTS="${RSYNC_OPTS}$(rsync_compat "$disc_desti")"
}

# ==========================================
# 3. MENÚ PRINCIPAL
# ==========================================
echo -e "${VERD}========================================${NC}"
echo -e "${VERD}   BACKUP_MUT - BACKUP I RESTAURACIÓ    ${NC}"
echo -e "${VERD}========================================${NC}"
echo ""
echo "1) Fer còpia de seguretat (backup)"
echo "2) Restaurar còpia de seguretat"
echo "3) Sortir"
echo ""

read -p "Tria una opció [1-3]: " opcio

# ==========================================
# 4. LÒGICA DE DECISIÓ (CASE)
# ==========================================
case $opcio in
    1) # --- OPCIÓ 1: FER BACKUP ---
        echo ""
        echo -e "${GROC}--- MODE BACKUP ---${NC}"

        detecta_discos
        echo ""
        echo -e "${BLAU}Unitats disponibles on guardar el backup:${NC}"
        mostra_discos
        echo ""

        # Arbre visual de tots els discs i particions del sistema
        DISC_SYS=$(disc_sistema)
        echo -e "${BLAU}🗺️  Mapa de discs del sistema (el disc '${DISC_SYS}' és el del Deepin i queda exclòs):${NC}"
        lsblk -o NAME,SIZE,TYPE,PKNAME,LABEL,MOUNTPOINT
        echo ""

        if [ "$NUM_DISCS" -eq 0 ]; then
            echo -e "${GROC}PKNAME és el disc físic 'pare'. Si tots els volums tenen el${NC}"
            echo -e "${GROC}mateix PKNAME que el sistema, són particions del mateix disc${NC}"
            echo -e "${GROC}físic i queden excloses per seguretat.${NC}"
            echo ""
        fi

        echo ""
        echo "Tria el directori ORIGEN:"
        echo -e "  ${VERD}A${NC}) /home/Miquel (tot el directori d'usuari)"
        echo -e "  ${VERD}B${NC}) /home/Miquel/Documents"
        echo -e "  ${VERD}C${NC}) /home/Miquel/Pictures"
        echo -e "  ${VERD}D${NC}) /home/Miquel/Downloads"
        echo -e "  ${VERD}S${NC}) Sistema Deepin (sda5)"
        echo -e "  ${GROC}R${NC}) Especificar ruta manualment"
        echo ""
        read -p "Opció [A/B/C/D/S/R]: " opcio_dir

        case "$opcio_dir" in
            A|a)
                origen="/home/Miquel/"
                echo -e "${VERD}✓ Directori seleccionat: /home/Miquel${NC}"
                ;;
            B|b)
                origen="/home/Miquel/Documents/"
                echo -e "${VERD}✓ Directori seleccionat: /home/Miquel/Documents${NC}"
                ;;
            C|c)
                origen="/home/Miquel/Pictures/"
                echo -e "${VERD}✓ Directori seleccionat: /home/Miquel/Pictures${NC}"
                ;;
            D|d)
                origen="/home/Miquel/Downloads/"
                echo -e "${VERD}✓ Directori seleccionat: /home/Miquel/Downloads${NC}"
                ;;
            S|s)
                echo -e "${VERD}💾 BACKUP DEL SISTEMA DEEPIN (sda5)${NC}"
                echo ""

                ARREL=$(findmnt -n -o SOURCE / 2>/dev/null)
                if [ "$ARREL" != "/dev/sda5" ]; then
                    echo -e "${GROC}⚠  Atenció: La partició arrel actual és ${ARREL:-desconeguda}, no /dev/sda5.${NC}"
                    read -p "Vols fer el backup del sistema actual de totes maneres? (s/n): " confirma_sys
                    if [ "$confirma_sys" != "s" ] && [ "$confirma_sys" != "S" ]; then
                        echo "Operació cancel·lada."
                        exit 0
                    fi
                fi

                if [ "$NUM_DISCS" -eq 0 ]; then
                    echo -e "${VERMELL}Error: No s'ha trobat cap USB o disc connectat!${NC}"
                    echo "Connecta un USB i torna a intentar-ho."
                    exit 1
                elif [ "$NUM_DISCS" -eq 1 ]; then
                    if munta_disc 1; then
                        USB_PATH="${DISC_MUNTATGE[1]}/"
                        echo -e "${BLAU}Unitat detectada: ${USB_PATH}${NC}"
                    else
                        exit 1
                    fi
                else
                    echo "Tria la unitat on guardar el backup del sistema:"
                    mostra_discos
                    read -p "Opció [1-$NUM_DISCS]: " opcio_sys
                    if [[ "$opcio_sys" =~ ^[0-9]+$ ]] && [ "$opcio_sys" -ge 1 ] && [ "$opcio_sys" -le "$NUM_DISCS" ]; then
                        if munta_disc "$opcio_sys"; then
                            USB_PATH="${DISC_MUNTATGE[$opcio_sys]}/"
                        else
                            exit 1
                        fi
                    else
                        echo -e "${VERMELL}Opció no vàlida.${NC}"
                        exit 1
                    fi
                fi
                echo ""

                origen="/"
                # Carpeta FIXA: el backup del sistema s'actualitza incrementalment
                desti="${USB_PATH}deepin_system_backup"

                echo "Origen: $origen"
                echo "Destí:  $desti"
                echo ""

                mkdir -p "$desti"

                if [ "$EUID" -ne 0 ]; then
                    echo -e "${GROC}⚠  Per copiar fitxers del sistema es necessiten permisos d'administrador.${NC}"
                    echo -e "${BLAU}Introdueix la teva contrasenya quan se't demani.${NC}"
                    RSYNC_SYS="sudo rsync"
                else
                    RSYNC_SYS="rsync"
                fi

                ajusta_rsync "$desti"

                echo -e "${VERD}Iniciant còpia de seguretat del sistema...${NC}"
                echo -e "${GROC}Aquest procés pot trigar força temps...${NC}"
                $RSYNC_SYS $RSYNC_OPTS \
                    --exclude='/proc' \
                    --exclude='/sys' \
                    --exclude='/dev' \
                    --exclude='/run' \
                    --exclude='/tmp' \
                    --exclude='/mnt' \
                    --exclude='/media' \
                    --exclude='/lost+found' \
                    "$origen" "$desti/"

                echo -e "${BLAU}Guardant informació del backup...${NC}"
                if [ "$RSYNC_SYS" == "sudo rsync" ]; then ESCRIU="sudo tee"; else ESCRIU="tee"; fi
                echo "ORIGEN=$origen" | $ESCRIU "${desti}/backup_info" > /dev/null
                {
                    echo "DATA=$(date +%Y-%m-%d_%H:%M:%S)"
                    echo "TIPUS=deepin_system_backup"
                    echo "USB=${USB_PATH}"
                    echo "PARTICIO=${ARREL:-/dev/sda5}"
                } | $ESCRIU -a "${desti}/backup_info" > /dev/null

                echo -e "${VERD}✅ Backup del sistema Deepin completat!${NC}"
                echo "Metadades guardades a: ${desti}/backup_info"
                echo ""
                exit 0
                ;;
            *)
                read -p "Directori ORIGEN (ex: /home/Miquel/Pictures/Pict): " origen
                ;;
        esac

        # --- Selecció del DESTÍ (sempre a partir del llistat) ---
        if [ "$NUM_DISCS" -eq 0 ]; then
            echo -e "${VERMELL}Error: no hi ha cap unitat disponible on guardar el backup.${NC}"
            echo "Connecta un USB o disc extern i torna-ho a provar."
            exit 1
        elif [ "$NUM_DISCS" -eq 1 ]; then
            if munta_disc 1; then
                desti_base="${DISC_MUNTATGE[1]}/backup_deepin"
                echo -e "${VERD}✓ Destí seleccionat: $desti_base${NC}"
            else
                exit 1
            fi
        else
            echo ""
            read -p "Tria la unitat de DESTÍ del backup (mira el llistat de dalt): " opcio_desti
            if [[ "$opcio_desti" =~ ^[0-9]+$ ]] && [ "$opcio_desti" -ge 1 ] && [ "$opcio_desti" -le "$NUM_DISCS" ]; then
                if munta_disc "$opcio_desti"; then
                    desti_base="${DISC_MUNTATGE[$opcio_desti]}/backup_deepin"
                    echo -e "${VERD}✓ Destí seleccionat: $desti_base${NC}"
                else
                    exit 1
                fi
            else
                echo -e "${VERMELL}Opció no vàlida.${NC}"
                exit 1
            fi
        fi

        if [ ! -d "$origen" ]; then
            echo -e "${VERMELL}Error: El directori origen '$origen' no existeix.${NC}"
            exit 1
        fi

        nom_carpeta=$(basename "$origen")
        if [[ "$origen" == /home/$USER* ]]; then
            # Dades personals: una carpeta nova amb data a cada execució
            desti="${desti_base}/${nom_carpeta}_$(date +%Y%m%d_%H%M)"
        else
            # Sistema (Roota, etc.): carpeta fixa actualitzada incrementalment
            desti="${desti_base}/${nom_carpeta}"
        fi

        [[ "$origen" != */ ]] && origen="${origen}/"
        rsync_desti="${desti}/"

        # SEGURETAT: mai copiar "/" sense exclusions (usa l'opció S)
        if [ "$origen" == "/" ]; then
            echo -e "${VERMELL}Error: per copiar tot el sistema usa l'opció S.${NC}"
            exit 1
        fi
        # SEGURETAT: el destí mai pot ser dins de l'origen (recursió infinita)
        case "$desti" in
            "$origen"*)
                echo -e "${VERMELL}Error: el destí ('$desti') és dins de l'origen ('$origen').${NC}"
                echo "Això provocaria una còpia infinita. Operació cancel·lada."
                exit 1
                ;;
        esac

        echo ""
        echo -e "${BLAU}📋 Resum del backup:${NC}"
        echo -e "   Origen: ${VERD}$origen${NC}"
        echo -e "   Destí:  ${VERD}$rsync_desti${NC}"
        echo ""
        read -p "Vols continuar? (s/n): " confirma_backup

        if [ "$confirma_backup" != "s" ] && [ "$confirma_backup" != "S" ]; then
            echo -e "${GROC}⚠  Operació cancel·lada. No s'ha copiat res.${NC}"
            exit 0
        fi

        mkdir -p "$desti"

        echo ""
        echo -e "${VERD}Iniciant còpia de seguretat...${NC}"

        ajusta_rsync "$desti"

        if [ "$EUID" -ne 0 ] && [[ "$origen" != /home/$USER* ]]; then
            RSYNC_CMD="sudo rsync"
            echo -e "${GROC}⚠  L'origen conté fitxers de sistema: cal contrasenya d'administrador.${NC}"
        else
            RSYNC_CMD="rsync"
        fi

        $RSYNC_CMD $RSYNC_OPTS "$origen" "$rsync_desti"

        echo -e "${BLAU}Guardant informació del backup...${NC}"
        if [ "$RSYNC_CMD" == "sudo rsync" ]; then ESCRIU="sudo tee"; else ESCRIU="tee"; fi
        echo "ORIGEN=$origen" | $ESCRIU "${desti}/backup_info" > /dev/null
        echo "DATA=$(date +%Y-%m-%d_%H:%M:%S)" | $ESCRIU -a "${desti}/backup_info" > /dev/null
        echo -e "${VERD}✅ Metadades guardades a ${desti}/backup_info${NC}"
        ;;

    2) # --- OPCIÓ 2: RESTAURAR BACKUP ---
        echo ""
        echo -e "${GROC}--- MODE RESTAURACIÓ ---${NC}"

        detecta_discos
        echo ""
        echo -e "${BLAU}Unitats disponibles on cercar backups:${NC}"
        mostra_discos
        echo ""

        if [ "$NUM_DISCS" -eq 0 ]; then
            echo -e "${VERMELL}Error: no hi ha cap unitat on cercar backups.${NC}"
            echo "Connecta un USB o disc extern i torna-ho a provar."
            exit 1
        elif [ "$NUM_DISCS" -eq 1 ]; then
            if munta_disc 1; then
                USB_PATH="${DISC_MUNTATGE[1]}/"
                echo -e "${VERD}✓ Unitat seleccionada: ${USB_PATH}${NC}"
            else
                exit 1
            fi
        else
            read -p "Tria la unitat on cercar el backup (mira el llistat de dalt): " opcio_usb
            if [[ "$opcio_usb" =~ ^[0-9]+$ ]] && [ "$opcio_usb" -ge 1 ] && [ "$opcio_usb" -le "$NUM_DISCS" ]; then
                if munta_disc "$opcio_usb"; then
                    USB_PATH="${DISC_MUNTATGE[$opcio_usb]}/"
                    echo -e "${VERD}✓ Unitat seleccionada: ${USB_PATH}${NC}"
                else
                    exit 1
                fi
            else
                echo -e "${VERMELL}Opció no vàlida.${NC}"
                exit 1
            fi
        fi

        # Cerca els backups de veritat: carpetes que contenen "backup_info"
        echo -e "${BLAU}Cercant backups disponibles...${NC}"
        mapfile -t backups < <(find "$USB_PATH" -maxdepth 4 -type f -name "backup_info" 2>/dev/null | sort -r)

        if [ ${#backups[@]} -eq 0 ]; then
            echo -e "${VERMELL}No s'han trobat backups a ${USB_PATH}.${NC}"
            exit 1
        fi

        echo ""
        echo "Backups trobats:"
        for i in "${!backups[@]}"; do
            info="${backups[$i]}"
            carpeta=$(dirname "$info")
            nom_backup=$(basename "$carpeta")
            data_backup=$(grep "^DATA=" "$info" | cut -d'=' -f2-)
            origen_b=$(grep "^ORIGEN=" "$info" | cut -d'=' -f2-)
            echo -e "  ${VERD}$((i+1))${NC}) $nom_backup"
            echo -e "       Data: $data_backup | Origen: $origen_b"
        done
        echo ""

        if [ ${#backups[@]} -eq 1 ]; then
            idx=0
            echo -e "${VERD}✓ Backup trobat: $(basename "$(dirname "${backups[0]}")")${NC}"
        else
            read -p "Tria un backup per restaurar [1-${#backups[@]}]: " eleccio
            if [[ "$eleccio" =~ ^[0-9]+$ ]] && [ "$eleccio" -ge 1 ] && [ "$eleccio" -le "${#backups[@]}" ]; then
                idx=$((eleccio-1))
            else
                echo -e "${VERMELL}Opció no vàlida.${NC}"
                exit 1
            fi
        fi

        info="${backups[$idx]}"
        backup_seleccionat=$(dirname "$info")
        origen_original=$(grep "^ORIGEN=" "$info" | cut -d'=' -f2-)
        data_backup=$(grep "^DATA=" "$info" | cut -d'=' -f2-)

        echo ""
        echo -e "${BLAU}Backup seleccionat: ${VERD}$backup_seleccionat${NC}"
        echo ""
        echo -e "${BLAU}📋 Informació del backup:${NC}"
        echo -e "   Origen original: ${VERD}$origen_original${NC}"
        echo -e "   Data del backup: ${VERD}$data_backup${NC}"
        echo ""
        echo -e "${BLAU}🔄 Restauració automàtica:${NC}"
        echo -e "   Des de: ${VERD}$backup_seleccionat${NC}"
        echo -e "   Cap a:  ${VERD}$origen_original${NC}"
        echo ""

        read -p "Vols continuar? (s/n): " confirma

        if [ "$confirma" != "s" ] && [ "$confirma" != "S" ]; then
            echo "Operació cancel·lada."
            exit 0
        fi

        echo ""
        echo -e "${VERD}Iniciant restauració...${NC}"

        if [ "$EUID" -ne 0 ] && [[ "$origen_original" != /home/$USER* ]]; then
            RSYNC_CMD="sudo rsync"
            echo -e "${GROC}⚠  La restauració toca fitxers de sistema: cal contrasenya d'administrador.${NC}"
        else
            RSYNC_CMD="rsync"
        fi
        $RSYNC_CMD $RSYNC_OPTS --exclude='backup_info' "$backup_seleccionat/" "$origen_original"

        echo ""
        echo -e "${VERD}✅ Restauració completada!${NC}"
        ;;

    3) # --- OPCIÓ 3: SORTIR ---
        echo "Adéu!"
        exit 0
        ;;

    *) # --- OPCIÓ NO VÀLIDA ---
        echo -e "${VERMELL}Opció no vàlida.${NC}"
        exit 1
        ;;
esac

echo ""
echo -e "${VERD}✅ Operació finalitzada!${NC}"

versió:17-8-2026

es salva amb Visual Code al escriptori -> backup_mut.txt abans de moure’l al seu lloc defintiu: /usr/local/bin/backup_mut

sudo cp /home/Miquel/Desktop/backup_mut.txt /usr/local/bin/backup_mut

i per pujar Grub del escriptori:

sudo cp /home/Miquel/Desktop/grub.txt  /etc/default/grub

i per pujar grub.config

sudo cp /home/Miquel/Desktop/grub_config.txt  /boot/grub/grub.cfg

I per esborrar directoris obsolets:

sudo rm -rf /media/Miquel/backup/backup_deepin


NOTA IMPORTANT

Per evitar interferencies amb l’arrancada es molt important eliminar el directory ROOT cuan es fa una restauració


GIMP 3.2.2 (PROGRAMA DE MANIPULACIÓ D’IMATGES GNU)

Per aconseguir una versió tan recent i de la nova branca 3.x (com la 3.2.2) a Deepin sense trencar les dependències del teu sistema, has de fer servir mètodes externs. Aquí tens les dues millors maneres de fer-ho:

Opció 1: Amb Flatpak (La més recomanada i neta)

Deepin s’integra molt bé amb Flatpak, i des del repositori de Flathub sempre tindràs l’última versió estable de GIMP 3.x disponible.

  1. Obre la Terminal a Deepin.
  2. Assegura’t de tenir Flatpak instal·lat i el repositori de Flathub afegit (copia i enganxa aquestes línies una per una, et demanarà la teva contrasenya a la primera)
sudo apt update
sudo apt install flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
  1. :sudo apt update sudo apt install flatpak flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
  2. Ara, instal·la l’última versió de GIMP disponible:flatpak install flathub org.gimp.GIMP
  3. Nota: Si un cop instal·lat no et surt a la teva llista d’aplicacions del menú de Deepin, tanca la sessió i torna a entrar (o reinicia l’ordinador) perquè el llançador d’aplicacions s’actualitzi i el reconegui.

💡 Consell extra per a Deepin:
De vegades, la Deepin Store (la botiga d’aplicacions visual) ja té integració amb Flatpak. Pots buscar «GIMP» directament allà, però fixa’t bé que a la informació del paquet digui que prové de «Flathub» o que és la versió 3.x. Si no ho indica, probablement estàs instal·lant la versió antiga del sistema.

Quin dels dos mètodes prefereixes provar? Si et trobes amb algun error concret a la terminal o la botiga es queda «pensant», digues-m’ho i ho solucionem al moment!


AppServ (de windows)

Amb molt de gust! 😊 Et deixo el text preparat perquè el puguis copiar i enganxar directament a una entrada de WordPress. He procurat que tingui un format de documentació, com una guia de consulta.


Instal·lació d’un entorn de desenvolupament LAMP a Deepin 25

Després d’instal·lar Apache, PHP, MariaDB i phpMyAdmin a Deepin 25, és útil saber on es troba cada component del sistema.

A diferència de Windows (AppServ, XAMPP, WAMP…), a Linux cada servei es guarda en el directori estàndard del sistema.

Equivalència amb AppServ

ComponentAppServ (Windows)Deepin 25
Servidor Web (Apache)C:\AppServ\Apache24\/etc/apache2/
Carpeta Web (www)C:\AppServ\www\/var/www/html/
PHPC:\AppServ\php\/usr/bin/php + /etc/php/8.4/
MariaDBC:\AppServ\MySQL\/var/lib/mysql/
phpMyAdminC:\AppServ\www\phpMyAdmin\/usr/share/phpmyadmin/
Configuració phpMyAdmindins del programa/etc/phpmyadmin/

ls -lh /etc/php/8.4/apache2/php*.ini

Miquel@Miquel-PC:~$ ls -lh /etc/php/8.4/apache2/php*.ini
-rw-r–r– 1 root root 68K de jul. 21 20:15 /etc/php/8.4/apache2/php.ini
-rw-r–r– 1 root root 68K de jul. 22 12:01 /etc/php/8.4/apache2/php_saved.ini
Miquel@Miquel-PC:~$

modificar php.ini amb Vs


1. Apache

Configuració

/etc/apache2/

Conté principalment:

apache2.conf
ports.conf

sites-available/
sites-enabled/

mods-available/
mods-enabled/

conf-available/
conf-enabled/

És el directori principal de configuració del servidor web.


Carpeta Web (DocumentRoot)

/var/www/html/

És l’equivalent al directori www d’AppServ.

Per exemple:

/var/www/html/index.php

es pot obrir des del navegador amb:

http://127.0.0.1/

o bé

http://localhost/

2. PHP

Executable:

/usr/bin/php

Per comprovar-ne la versió:

php -v

o bé

which php

Configuració

/etc/php/8.4/

Conté:

apache2/
cli/
mods-available/

Fitxers principals:

Servidor Apache

/etc/php/8.4/apache2/php.ini

Terminal (CLI)

/etc/php/8.4/cli/php.ini

3. MariaDB

Les bases de dades es guarden a:

/var/lib/mysql/

Allà hi trobarem una carpeta per cada base de dades.

Per exemple:

information_schema/

mysql/

performance_schema/

phpmyadmin/

sys/

polidic/

4. phpMyAdmin

ACCÉS-> http://127.0.0.1/phpmyadmin/

Amb Firexox hi ha alguna dificultat amb la funció Importar i es millor posar la bd al escriptori i usar:

   mysql -u root -p beseit < ~/Desktop/beseit.sql

Programa:

/usr/share/phpmyadmin/

Configuració:

/etc/phpmyadmin/

5. Registres (Logs)

Els registres d’Apache es troben a:

/var/log/apache2/

Principalment:

access.log

error.log

Quan alguna cosa no funciona, aquest és el primer lloc on mirar.


6. Estat dels serveis

Comprovar Apache

sudo systemctl status apache2

Comprovar MariaDB

sudo systemctl status mariadb

Reiniciar Apache

sudo systemctl restart apache2

Reiniciar MariaDB

sudo systemctl restart mariadb

7. Estructura recomanada dels projectes

Per defecte Apache utilitza:

/var/www/html/

Una bona organització consisteix a crear un directori per cada projecte:

/var/www/

    html/

    polidic/

    wordpress/

    proves/

    api/

Exemple

/var/www/

├── html/
│     index.php
│
├── polidic/
│     index.php
│     css/
│     js/
│     includes/
│     BD_conexions/
│     0imatges_polidic/
│     diccionaris_default/
│
├── wordpress/
│
└── proves/

D’aquesta manera podem accedir als projectes mitjançant:

http://localhost/polidic/
http://localhost/wordpress/

8. Directoris més importants

DirectoriFunció
/etc/apache2/Configuració d’Apache
/var/www/html/Carpeta web principal
/usr/bin/phpExecutable PHP
/etc/php/8.4/Configuració de PHP
/var/lib/mysql/Bases de dades MariaDB
/usr/share/phpmyadmin/Programa phpMyAdmin
/etc/phpmyadmin/Configuració phpMyAdmin
/var/log/apache2/Registres d’Apache

Conclusions

Deepin (igual que Debian i Ubuntu) distribueix cada component del servidor en el seu directori corresponent. Això pot semblar menys intuïtiu que AppServ o XAMPP, però ofereix molts avantatges:

  • configuració més clara i modular;
  • actualitzacions independents de cada component;
  • més estabilitat i seguretat;
  • estructura estàndard compartida per la majoria de distribucions Linux.

Un cop coneguda aquesta organització, administrar un servidor LAMP resulta tan senzill com treballar amb AppServ a Windows, amb l’avantatge d’utilitzar l’estructura estàndard de Linux.


Espero que aquesta guia et sigui útil. Ha estat un plaer ajudar-te a deixar el teu Deepin preparat com a entorn de desenvolupament. Bon treball amb Polidic! 🚀


1. Apache

Configuració

/etc/apache2/

Conté:

apache2.conf
ports.conf

sites-available/
sites-enabled/

mods-available/
mods-enabled/

conf-available/
conf-enabled/

És probablement el directori que més tocaràs.


DocumentRoot (equivalent a www)

/var/www/html/

Aquí és on Apache serveix la web per defecte.

Per exemple:

/var/www/html/index.php

es veu a:

http://127.0.0.1/

2. PHP

Executable

/usr/bin/php

Comprovar:

which php

Configuració:

/etc/php/8.4/

Conté:

apache2/
cli/
mods-available/

El fitxer principal és:

/etc/php/8.4/apache2/php.ini

i pel terminal:

/etc/php/8.4/cli/php.ini

3. MariaDB

Les bases de dades estan a:

/var/lib/mysql/

Si hi entres veuràs alguna cosa semblant a:

information_schema/

mysql/

performance_schema/

sys/

nom_base_dades/

Cada base de dades és un directori.


4. phpMyAdmin

Programa

/usr/share/phpmyadmin/

Configuració

/etc/phpmyadmin/

5. Logs

Apache

/var/log/apache2/

Conté

access.log

error.log

Són molt útils quan alguna cosa falla.


6. Serveis

Comprovar Apache

sudo systemctl status apache2

MariaDB

sudo systemctl status mariadb

7. Els teus projectes

Ara mateix Apache utilitza

/var/www/html/

Però pots crear-ne tants com vulguis.

Per exemple:

/var/www/

    html/

    polidic/

    proves/

    api/

    wordpress/

i configurar un VirtualHost per a cadascun.


8. Si vols treballar com AppServ

Com que estàs acostumat a Windows, jo faria una estructura molt semblant:

/var/www/

    html/
        index.php

    polidic/
        index.php
        css/
        js/
        imatges/
        includes/

    wordpress/

    proves/

Això et resultarà molt familiar.


El meu suggeriment per al teu cas

Coneixent el projecte Polidic, jo el deixaria així:

/var/www/
│
├── html/
│
├── polidic/
│   ├── index.php
│   ├── css/
│   ├── js/
│   ├── BD_conexions/
│   ├── includes/
│   ├── 0imatges_polidic/
│   ├── diccionaris_default/
│   └── ...
│
└── wordpress/

D’aquesta manera podràs accedir-hi amb una URL com http://localhost/polidic/, molt semblant al que feies amb AppServ.

Quan vulguis, també et puc ajudar a configurar VirtualHosts perquè puguis obrir els teus projectes amb adreces encara més còmodes, per exemple:

  • http://polidic.local
  • http://wordpress.local

És una configuració molt pràctica per treballar en desenvolupament i és la que acostumen a fer servir molts desenvolupadors Linux.

Directament, no es pot instal·lar AppServ de manera nativa a Deepin (ni a cap altra distribució Linux moderna). Tot i que algunes fonts antigues esmenten un suport teòric per a Linux, els instal·ladors actuals d’AppServ són fitxers .exe dissenyats exclusivament per a l’entorn Windows [[44]].

No et preocupis, però: com que Deepin està basat en Debian, tens alternatives molt millors, més segures i totalment integrades per aconseguir exactament el mateix resultat (un servidor web amb Apache, PHP, base de dades i phpMyAdmin).

Aquí tens les millors opcions per al teu sistema:

1. Entorn LAMP natiu (Opció més recomanada)

És l’estàndard de la indústria en entorns Linux. En lloc d’un instal·lador de tercers, utilitzes els paquets oficials de Deepin, la qual cosa garanteix major estabilitat i actualitzacions de seguretat automàtiques. Obre la terminal i executa:

  1. Actualitza la llista de paquets:
   sudo apt update
  1. Instal·la el servidor web Apache:
   sudo apt install apache2

Per comprovar si Apache està instal·lat a Deepin i on es troba, executa aquestes comandes a la terminal:

1. Comprovar si Apache està instal·lat

apache2 -v

o

dpkg -l | grep apache2

Si està instal·lat, veuràs la versió. Si no, dirà que no es troba la ordre.

2. Comprovar si està en execució

sudo systemctl status apache2

Si està actiu, veuràs active (running) en verd.

3. On està instal·lat

Els fitxers principals es troben a:

  • Executable: /usr/sbin/apache2
  • Fitxers de configuració: /etc/apache2/
  • Carpeta web (document root): /var/www/html/
  • Logs: /var/log/apache2/

4. Veure la configuració del document root

grep -i "documentroot" /etc/apache2/sites-available/000-default.conf

Això et dirà on estan els fitxers web (normalment /var/www/html).

5. Comprovar si el port 80 està escoltant

sudo netstat -tlnp | grep :80

o

sudo ss -tlnp | grep :80

Resum ràpid: Executa apache2 -v per saber si està instal·lat i sudo systemctl status apache2 per saber si està funcionant. Si vols veure la pàgina per defecte, ves a http://localhost al navegador.

  1. Instal·la el servidor de base de dades (MariaDB, el substitut directe i compatible de MySQL a Debian/Deepin):
   sudo apt install mariadb-server
  1. Instal·la PHP i els mòduls necessaris per connectar amb la base de dades:
   sudo apt install php libapache2-mod-php php-mysql
  1. (Opcional) Instal·la phpMyAdmin per gestionar les bases de dades des del navegador:
   sudo apt install phpmyadmin

Nota: Durant la instal·lació, quan et pregunti, prem la barra espaiadora per seleccionar apache2 i després Enter. També et demanarà configurar una contrasenya per a l’administrador de la base de dades.

Un cop finalitzat, pots comprovar que tot funciona obrint el navegador i visitant http://localhost. Els teus fitxers web aniran a la carpeta /var/www/html/.

2. XAMPP per a Linux (Alternativa «tot en un»)

Si prefereixes una experiència més semblant a la d’AppServ (un sol paquet que instal·la tot de cop), XAMPP ofereix una versió oficial per a Linux. El pots descarregar des del lloc web d’Apache Friends i executar l’instal·lador .run des de la terminal. Tot i això, la comunitat de desenvolupament sol recomanar l’opció LAMP nativa, ja que XAMPP a vegades pot donar problemes de permisos o no rebre actualitzacions tan àgils com el gestor de paquets apt.

3. Docker (Per a entorns aïllats)

Com a estudiant de ciències de la computació, és molt probable que en el futur valoris tenir entorns aïllats. Pots fer servir Docker per desplegar un contenidor LAMP amb una sola ordre, sense instal·lar res directament al teu sistema operatiu Deepin, mantenint-lo net i sense conflictes entre projectes.

Resum: Descarta AppServ per a Linux. La instal·lació nativa de LAMP mitjançant la terminal de Deepin és el camí més ràpid, professional i lliure de problemes de permisos a llarg termini. Si necessites ajuda per configurar qualsevol d’aquests passos, no dubtis a dir-m’ho!