#!/bin/bash
# lastact: arturo@2023-04-21
# desc: Permite hacer uso de xfconf-query desde el usuario root
[[ ! "${1}" || ! "${2}" || ! "${3}" || ! "${4}" ]] &&
    echo "=> Debes pasar 4 parámetros: usuario_a_suplantar canal clave valor" &&
    echo "Ej. vx-xfconf-query-root-set $(vx-usuario-grafico) xfce4-panel /panels/panel-0/icon-size 0" &&
    exit 1
# export DISPLAY=:0
# export XAUTHORITY="$(vx-home-usuario-grafico "${1}")/.Xauthority"
# export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u "${1}")/bus"
# $1: nombre del usuario con que ejecutar el comando xfconf. Comprobamos que el usuario existe:
USUARIOG="$(vx-usuario-grafico)"
if [[ "${1}" ]]; then
    getent passwd "${1}" >/dev/null 2>&1 &&
        USUARIO="${1}" ||
        {
            echo "=> Error: El usuario indicado ${1} no existe, suplantaremos al usuario gráfico" >&2 &&
                USUARIO="${USUARIOG}"
        }
else
    USUARIO="${USUARIOG}"
fi
# $2: canal: xfce4-desktop xfce4-panel ... [canales disponibles: xfconf-query -l -v]
CANAL="${2}"
# $3: path
PATH_XML="${3}"
# $4: valor
VALOR="${4}"
COMANDO="xfconf-query -c ${CANAL} -p ${PATH_XML} -s ${VALOR}"
if [[ "${USER}" == "root" ]]; then
    # [[ "${USUARIOG}" != "lightdm" ]] &&
    #     su "${1}" -c "${COMANDO}" ||
    #     ssh -o StrictHostKeyChecking=no "${1}"@localhost su "${1}" \
    #         -c "DISPLAY=:0 XAUTHORITY=${XAUTHORITY} DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u "${1}")/bus \
    #         ${COMANDO}"
    vx-runas "${USUARIO}" "${COMANDO}"
else
    eval "${COMANDO}"
fi

# A través del canal obtenemos el fichero XML del skel que hay que modificar en consonancia con la modificación anterior.
# Los archivos XML tienen la siguiente sintaxis: [nombre_del_canal].xml
# La ruta del skel donde estan es: /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml
DIR_SKEL_XFCONF="/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml"
RUTA_XML="${DIR_SKEL_XFCONF}/${CANAL}.xml"
# Siendo root modificamos el XML del /etc/skel:
if [[ "${USER}" == "root" && -f "${RUTA_XML}" ]] && xmlstarlet val "${RUTA_XML}" >/dev/null 2>&1; then
    vx-xfconf-query "${RUTA_XML}" "${PATH_XML}" "s" --valor "${VALOR}"
fi
