Sous Linux, gPhotoÂČ prend en charge la synchronisation de lâhorloge interne de lâappareil photo avec celle de lâordinateur pour de nombreux modĂšles. La liste complĂšte des modĂšles supportĂ©s est disponible sur le site de gPhotoÂČ, plus de dĂ©tail dans le billet sur gPhotoÂČ et la date.
Tant que votre ordinateur est configuré pour utiliser NTP
, les horodatages des photos sont assez prĂ©cis, on reviendra dans un prochain article sur lâintĂ©rĂȘt de cette prĂ©cision.
Exécuter cette synchronisation manuellement implique :
- de brancher lâappareil photo,
- de dĂ©monter le systĂšme de fichier de lâappareil photo aprĂšs son Ă©ventuel montage automatique afin que gPhotoÂČ puisse y accĂ©der,
- puis dâexĂ©cuter la commande gPhotoÂČ appropriĂ©e pour synchroniser lâhorloge de lâappareil photo.
GalĂšreâŠ
Mais il est possible dâautomatiser ce processus en utilisant les fonctionnalitĂ©s de udev. udev est le « service » (« daemon ») chargĂ© de gĂ©rer les « device-nodes ». Si vous souhaitez plus de dĂ©tail, je vous invite Ă lire lâintroduction Ă udev, mais ce billet va sâautoriser une Ă©norme simplification en disant que câest un service qui gĂšre lâajout des pĂ©riphĂ©riques USB.
Explications
AprĂšs la petite introduction Ă udev du billet prĂ©cĂ©dant, on peut envisager dâautomatiser le processus de synchronisation de lâheure.
LâidĂ©e est dâajouter une rĂšgle udev pour exĂ©cuter la commande de synchronisation dâhorloge, avant le montage de la camĂ©ra.
Nous allons donc avoir besoin dâun script qui effectuera le traitement souhaitĂ©, puis une rĂšgle pour exĂ©cuter ce script.
Le script exécuté par la rÚgle
Le script doit effectuer la mise Ă jour de lâheure, on va sâappuyer sur les conclusions du billet sur gPhotoÂČ et la date:
Cependant dans lâenvironnement udev on se retrouve dans un environnement systĂšme en cours dâinitialisation et en particulier lâenvironnement de la date nâest pas encore correctement configurĂ©. Nous allons devoir palier Ă cela en configurant nous-mĂȘmes la valeur TZ (« Time Zone »).
-
Version pour aider Ă lâanalyse des problĂšmes
Cette base de script ne doit ĂȘtre utilisĂ©e que dans le cadre dâune recherche de solution :
#!/bin/bash # # /usr/local/bin/gphoto2-set-date.sh # ( echo LC_TIME=$LC_TIME* echo TZ=$TZ date +'%F %T' date -u +"%s" --date="$( date +'%F %T' )" date -u +"%F %T" --date="$( date +'%F %T' )" timedatectl TZ=$( cat /etc/timezone ) || return $? export TZ echo LC_TIME=$LC_TIME echo TZ=$TZ date +'%F %T' date -u +"%s" --date="$( date +'%F %T' )" date -u +"%F %T" --date="$( date +'%F %T' )" timedatectl gphoto2 --set-config /main/settings/datetimeutc=$( date -u +"%s" --date="$( date +'%F %T' )" ) && gphoto2 --get-config datetime ) >>/tmp/gphoto2-set-date.log
Pour obtenir la trace utiliser aprĂšs change branchement du cĂąble USBÂ :
cat /tmp/gphoto2-set-date.log
Le script :
#!/bin/bash
#
# /usr/local/bin/gphoto2-set-date.sh
#
TZ=$( cat /etc/timezone ) || return $?
export TZ
gphoto2 --set-config /main/settings/datetimeutc=$( date -u +"%s" --date="$( date +'%F %T' )" )
Voici comment créer ce script automatiquement et de maniÚre plus sécurisée :
cat <<EOF | sudo tee /usr/local/bin/gphoto2-set-date.sh && sudo chmod -v 755 /usr/local/bin/gphoto2-set-date.sh
#!/bin/bash
#
# /usr/local/bin/gphoto2-set-date.sh
#
TZ=\$( cat /etc/timezone ) || return $?
export TZ
$( which gphoto2 ) --set-config /main/settings/datetimeutc=\$( date -u +"%s" --date="\$( date +'%F %T' )" )
EOF
Vous noterez que jâutilise $( which gphoto2 )
pour coder en dur le chemin vers gPhotoÂČ afin de sĂ©curiser un peu le script, ensuite on donne les droits en Ă©criture Ă lâutilisateur root exclusivement.
La notation \$
permet lors du cat
initial de ne pas exécuter la commande bash
.
Construire le nom de la rĂšgle
Les rĂšgles Ă©tant traitĂ©es dans lâordre alphabĂ©tique, il faut donc identifier la rĂšgle responsable du montage de la camĂ©ra pour insĂ©rer notre nouvelle rĂšgle avant.
Nous avons vu cela dans le billet précédent :
Exécutez le code suivant depuis un terminal :
while read -r F ; do
if grep --quiet gphoto2 "$F" ; then
echo "$F"
fi
done < <(
[ -d /etc/udev/rules.d/ ] && find /etc/udev/rules.d/*.rules
[ -d /run/udev/rules.d/ ] && find /run/udev/rules.d/*.rules
[ -d /lib/udev/rules.d/ ] && find /lib/udev/rules.d/*.rules
)
Suivant votre systÚme et sa version vous devriez avoir un fichier du type :
/etc/udev/rules.d/40-libgphoto2-6.rules
,/lib/udev/rules.d/60-libgphoto2-6.rules
ou/etc/udev/rules.d/90-libgphoto2.rules
Je vous propose de créer une rÚgle 39-gphoto2-sync-camera-times.rules
et donc de créer un fichier /etc/udev/rules.d/39-gphoto2-sync-camera-times.rules
afin quâelle soit prise en compte avant le montage automatique de la camĂ©ra.
La rĂšgle
Le contenu de ce fichier peu dĂ©pendre de la version de gPhotoÂČ que vous utilisez, mais cela devrait ĂȘtre assez proche de la configuration que je vous propose.
-
La rĂšgle udev
Il suffit de créer un fichier
/etc/udev/rules.d/39-gphoto2-sync-camera-times.rules
contenant :# udev rules file for libgphoto2 devices ACTION!="add", GOTO="sync_camera_time_rules_end" SUBSYSTEM!="usb", GOTO="sync_camera_time_rules_end" ENV{ID_USB_INTERFACES}=="", IMPORT{builtin}="usb_id" ENV{ID_USB_INTERFACES}=="*:060101:*", RUN+="/bin/bash -c /usr/local/bin/gphoto2-set-date.sh" LABEL="sync_camera_time_rules_end"
Je vous conseille dâexĂ©cuter le code suivant pour injecter la configuration :
cat <<EOF | sudo tee /etc/udev/rules.d/39-gphoto2-sync-camera-times.rules && sudo chmod -v 644 /etc/udev/rules.d/39-gphoto2-sync-camera-times.rules
# udev rules file for libgphoto2 devices
ACTION!="add", GOTO="sync_camera_time_rules_end"
SUBSYSTEM!="usb", GOTO="sync_camera_time_rules_end"
ENV{ID_USB_INTERFACES}=="", IMPORT{builtin}="usb_id"
ENV{ID_USB_INTERFACES}=="*:060101:*", RUN+="$( which bash ) -c /usr/local/bin/gphoto2-set-date.sh"
LABEL="sync_camera_time_rules_end"
EOF
DĂ©sormais, lâhorloge interne de lâappareil photo sera synchronisĂ©e avec celle de lâordinateur chaque fois que lâappareil est branchĂ©.
Cette rĂšgle a Ă©tĂ© testĂ©e sous Linux Mint 19, mais elle devrait fonctionner pour tout autre appareil photo pour lequel gPhotoÂČ prend en charge la synchronisation de lâhorloge et sous les distributions rĂ©centes basĂ©es sur Ubuntu.
Références
- Les autres billets sur gPhotoÂČ,
- Inspirée de Automatic Camera Clock Synchronization under Linux [EN]
- The gphoto.org website [EN]
- The gPhotoÂČ Manual [EN]
- Tutorial on how to write basic udev rules in Linux [EN]
- Une introduction Ă udev
኿