6 votos

Configuración de la cuenta Picture/JPEGPhoto con dscl en el terminal

Estoy trabajando en un script basado en esta pregunta: ¿Qué pasos son necesarios para crear un nuevo usuario desde la línea de comandos en Mountain Lion?

El scriptse empaqueta en un instalador vacío como un scriptposterior al vuelo.

Todo funciona bastante bien - sin embargo, no puedo conseguir el ajuste de la imagen de la cuenta. Puedo utilizar dscl para establecer la propiedad Picture a un archivo de imagen, por ejemplo el fotos de la cuenta de Apple por defecto.

Incluso puedo copiar una foto que incluya en el paquete en varios directorios, incluido /Users/newAccount/Public. Pero los permisos están desordenados y nadie más que la nueva cuenta puede ver la imagen del perfil. No puedo modificar el archivo. En su lugar, tengo que utilizar la interfaz gráfica de usuario y "obtener información -> Establecer permisos"

La otra opción que veo es si pongo el valor de JPEGPhoto. Esto es lo que ocurre cuando se usa una foto personalizada o se toma una en el photobooth. Sin embargo, no estoy seguro de cómo convertir la foto que incluyo en el instalador en Hex o lo que sea que se almacena en el valor JPEGPhoto.

Gracias. - Chris

Edición: Añadido script. Todo funciona en este script - la imagen simplemente no se muestra, debido a los permisos. La ruta está configurada correctamente. He tratado de colocarlo en varias ubicaciones diferentes que tienen acceso compartido, pero no importa que los permisos son incorrectos y no puedo chmod ellos.

###CREATE TP ADMINISTRATOR ACCOUNT###

LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`

NextID=$((LastID + 1))
. /etc/rc.common
dscl . create /Users/administrator

dscl . create /Users/administrator RealName "Administrator Account"
dscl . create /Users/administrator hint "the password Duh"

dscl . passwd /Users/administrator password
dscl . create /Users/administrator UniqueID $NextID
dscl . create /Users/administrator PrimaryGroupID 80
dscl . create /Users/administrator UserShell /bin/bash
dscl . create /Users/administrator NFSHomeDirectory /Users/administrator
cp -R /System/Library/User\ Template/English.lproj /Users/administrator
chown -R administrator:staff /Users/administrator

cp $1"/Contents/Resources/admin.jpg" /Users/administrator/Public
dscl . create /Users/administrator Picture "/Users/administrator/Public/admin.jpg"

###CREATE TP ADMINISTRATOR ACCOUNT###

5voto

Dscl

Parece que el método más prometedor es modificar el JPEGPhoto para el usuario. El problema es que, aunque la imagen JPEG se puede convertir de forma muy sencilla en una cadena hexadecimal, el valor es demasiado largo para pasarlo por la línea de comandos. Este atributo parece ser lo que la GUI escribe cuando se arrastra una imagen. Recuperar la imagen de esta variable cuando se establece es tan simple como:

dscl . read /Users/username JPEGPhoto | xxd -r -p > ./username.jpg

La segunda forma común mencionada en los foros es:

dscl . delete /Users/username JPEGPhoto
dscl . delete /Users/username Picture
dscl . delete /Users/username Picture "/Library/User Pictures/username.jpg"

Esto sólo cambia el icono de "inicio de sesión" y no el icono que se ve en la página de detalles del usuario en las Preferencias del Sistema.

Uso de sysadminctl

Al crear o gestionar usuarios, prefiera sysadminctl sobre la lista de dscl comandos que se mencionan habitualmente en los foros. sysadminctl configura el usuario correctamente con un TOKEN SEGURO que es importante si se quiere utilizar FileVault el usuario debería poder desbloquear el disco en el arranque. También ofrece la posibilidad de establecer la imagen de usuario cuando se crea. Lamentablemente no ofrece la posibilidad de cambiar las imágenes de usuario.

Uso de dsimport

Lo que sí funciona para cambiar la imagen del usuario es dsimport .

El uso de script es:

./change_userpic.sh USERNAME /path/to/image/jpg

GIST

#!/bin/bash

declare -xr AWK_CMD="/usr/bin/awk"
declare -xr SW_VERS_CMD="/usr/bin/sw_vers"
declare -xr DSIMPORT_CMD="/usr/bin/dsimport"
declare -xr ID_CMD="/usr/bin/id"

USERNAME="$1"; export USERNAME
USERPIC="$2"; export USERPIC

OSVERSION=$(${SW_VERS_CMD} -productVersion | ${AWK_CMD} -F"." '{print $2;exit}'); export OSVERSION
# Add the LDAP picture to the user record if dsimport is avaiable 10.6+
if [ -f "${USERPIC}" ] ; then
    # On 10.6 and higher this works
    if [ "${OSVERSION}" -ge "6" ] ; then
        declare -x MAPPINGS='0x0A 0x5C 0x3A 0x2C'
        declare -x ATTRS='dsRecTypeStandard:Users 2 dsAttrTypeStandard:RecordName externalbinary:dsAttrTypeStandard:JPEGPhoto'
        declare -x PICIMPORT="/Library/Caches/${USERNAME}.picture.dsimport"
        printf "%s %s \n%s:%s" "${MAPPINGS}" "${ATTRS}" "${USERNAME}" "${USERPIC}" >"${PICIMPORT}"
        # Check to see if the username is correct and import picture
        if ${ID_CMD} "${USERNAME}" &>/dev/null ; then
            # No credentials passed as we are running as root
            ${DSIMPORT_CMD} "${PICIMPORT}" /Local/Default M &&
                echo "Successfully imported users picture."
        fi
    fi
fi

0voto

Afpl Admin Puntos 1

Para convertir las imágenes a jpeg antes de dsimportar puede utilizar una herramienta incorporada sorbos .

He aquí un ejemplo: https://gist.github.com/skounis/706d621469e974d478ed

Y en Terminal puedes usar: man sips o sips -h

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X