Compilar chdkptp en Debian Wheezy
Con notas de actualización para Debian Jessie y ~~Ubuntu 16.04~~
Pre-requisitos para la compilación
Asegurarse que el repositorio de código fuente esté habilitado en la lista de fuentes de Debian en /etc/apt/sources.list
. Si no, editar el archivo (como root) y agregar o descomentar esta línea:
deb-src http://ftp.us.debian.org/debian wheezy main
en Ubuntu 16.04 agregar la línea deb-src http://ar.archive.ubuntu.com/ubuntu/ xenial main
Actualizar la lista de paquetes (use sudo
en Ubuntu o usuario root en Debian):
apt-get update
Instalar dependencias para usb
apt-get install libusb-1.0-0 libusb-dev liblua5.1-0-dev liblua5.1-0 libusb-1.0-0-dev
Verificar las siguientes dependencias de soporte para lua, readline y cairo
apt-get install lua5.1 liblua5.1-0-dev lua5.2 liblua5.2-dev libreadline-dev libreadline6-dev libcairo2-dev
Y verificar también:
apt-get install subversion git
Instalar IUP (Portable User Interface) y CD (Canvas Draw): Descargar los binarios precompilados de las librerías iup, cd (buscar los links de descarga a la ultima versión) del sitio del Instituto Tecgraf de Desenvolvimento de Software Técnico-Científico da PUC-Rio (Tecgraf/PUC-Rio)
- IUP - Portable User Interface - PUC-Rio http://www.tecgraf.puc-rio.br/iup/
- CD - Canvas Draw http://www.tecgraf.puc-rio.br/cd/
Si bien la siguiente librería, IM (Image Representation, Storage, Capture and Processing), no es necesaria para chdkptp, debe instalarla si desea usar DALclick:
- IM - Image Representation, Storage, Capture and Processing http://www.tecgraf.puc-rio.br/im/
Excepto para las últimas versiones es posible que los archivos tar.gz descargados se descompriman en ./
(es decir, no se crea un subdirectorio). Realice un test previo descomprimiendo en una carpeta temporal, si no se crea una carpeta contenedora deberá crearla manualmente y mover el archivo tar.gz.
Nota: Para averiguar si nuestro sistema es de 32 o 64 bits puede usarse uname -m
. Hay paquetes pre-compilados tanto para 32 como para 64 bits:
iup-<ver>_Linux32_64_lib.tar.gz
cd-<ver>_Linux32_64_lib.tar.gz
im-<ver>_Linux32_64_lib.tar.gz
Para instalar, ingresar a cada carpeta y ejecutar como root (o usando sudo
) los scripts de instalación (en cada carpeta el archivo LINSTALL incluye más info sobre la instalación)
export USE_LUA52=Yes
bash install
bash install_dev
bash
Nota1: el primer comando configura la instalación para Lua 5.2. Por defecto los scripts estan preconfigurados para Lua 5.1 (2015)
Cambios en las versiones mas recientes de iup, im y cd
En versiones más recientes de precompilados de iup
, im
, y cd
(~2015 en adelante) los módulos para Lua
estan disponibles por separado, ej, para Lua 5.1:
Precompilado: Módulo para Lua 5.1:
cd-5.9_Linux32_lib.tar.gz ----> cd-5.9-Lua51_Linux32_lib.tar.gz
iup-3.18_Linux32_lib.tar.gz --> iup-3.18-Lua51_Linux32_lib.tar.gz
im-3.10_Linux32_lib.tar.gz ---> im-3.10-Lua51_Linux32_lib.tar.gz
Debe ejecutarse install
en ambos directorios (opcionamente install_dev
para desarrollo) y el script config_lua_module
(que crea los accesos directos desde /usr/lib/lua/5.x
a los archivos *.so
en /usr/lib
) sólo debe ejecutarse desde la carpeta del módulo Lua seleccionado y no en el precompilado.
Por ejemplo para IUP:
#instalar precompilado de IUP
cd /ruta/a/libs/tecgraf/iup-3.19.1_Linux32_64_lib
bash install
bash install_dev
#instalar modulo para Lua 5.1
export USE_LUA52=""
cd ../iup-3.19.1-Lua51_Linux32_64_lib
bash install
bash install_dev
config_lua_module
#instalar modulo para Lua 5.2
export USE_LUA52=Yes
cd ../iup-3.19.1-Lua52_Linux32_64_lib
bash install
bash install_dev
config_lua_module
Para desinstalar (como root):
bash uninstall
Obtener el código fuente de chdkptp
Descargar el repositorio oficial
svn co http://subversion.assembla.com/svn/chdkptp/trunk chdkptp
Compatibilidad con DALclick
En el caso de instalar chdkptp para usarlo con DALclick, para obtener el código de la versión compatible de chdkptp use:
cd chdkptp
svn up -r461
Versiones seguras de cd, iup, im para DALclick (probadas en Debian Wheezy 32 bits)
iup-3.8_Linux32_lib
cd-5.6.1_Linux32_lib
im-3.8.2_Linux32_lib
actualizacion 2016 Versiones seguras para DALclick (probadas en Debian Jessie 64 bits)
iup-3.19.1_Linux32_64_lib
cd-5.10_Linux32_64_lib
im-3.11_Linux32_64_lib
Configurar chdkptp
Crear archivo de configuración a partir del ejemplo
mv config-sample-linux.mk config.mk
Configurar para compatibilidad con DALclick (r461)
Editar el archivo config.mk
con los siguientes parámetros y agregar los links a las librerias:
IUP_SUPPORT=1
CD_SUPPORT=1
CD_USE_PLUS=cairo
PTPIP_SUPPORT=0
LUA_INCLUDE_DIR=/usr/include/lua5.1
LUA_LIB=lua5.1
DEBUG=1
IUP_LIB_DIR=/opt/src/iup-<ver>_Linux32_lib
IUP_INCLUDE_DIR=/opt/src/iup-<ver>_Linux32_lib/include
CD_LIB_DIR=/opt/src/cd-<ver>_Linux32_lib
CD_INCLUDE_DIR=/opt/src/cd-<ver>_Linux32_lib/include
Configurar para versiones más recientes (2016)
ejemplo de config.mk para chdkptp changeset 659, tecgraf precomp. libs: IUP ver 3.15 32/64 y CD ver 5.8.2 32/64
USE_LUA_52=1
IUP_SUPPORT=1
CD_SUPPORT=1
CD_USE_PLUS=cairo
PTPIP_SUPPORT=0
READLINE_SUPPORT=1
LUA_INCLUDE_DIR=/usr/include/lua5.2
LUA_LIB=lua5.2
IUP_LIB_DIR=/opt/src/iup-<ver>_Linux32_64_lib
IUP_INCLUDE_DIR=/opt/src/iup-<ver>_Linux32_64_lib/include
CD_LIB_DIR=/opt/src/cd-<ver>_Linux32_64_lib
CD_INCLUDE_DIR=/opt/src/cd-<ver>_Linux32_64_lib/include
Compilar
Dentro la carpeta chdkptp ejecutar
make
Nota: si se vuelve a compilar no olvidar hacer make clean
antes del nuevo make
Verificaciones previas para ejecutar chdkptp
chdkptp
no podrá conectarse con el dispositivo si se encuentra montado por el sistema. Es práctico desactivar el servicio de escritorio que monta automáticamente los dispositivos cuando son detectados. En caso contrario habrá que desmontarlo manualmente cada vez que se vuelva a conectar o encender la cámara. Para evitar automount
:
#desactivar automount antes de ejecutar chdkptp
gsettings set org.gnome.desktop.media-handling automount "false"
gsettings set org.gnome.desktop.media-handling automount-open "false"
#activar automount luego de cerrar chdkptp
gsettings set org.gnome.desktop.media-handling automount "true"
gsettings set org.gnome.desktop.media-handling automount-open "true"
Actualización 2015 Debian Jessie Si lo anterior no funciona en Gnome 3 probar:
#desactivar
gsettings set org.cinnamon.desktop.media-handling automount "false"
gsettings set org.cinnamon.desktop.media-handling automount-open "false"
#activar
gsettings set org.cinnamon.desktop.media-handling automount "true"
gsettings set org.cinnamon.desktop.media-handling automount-open "true"
Para escritorio "Mate" en Debian Jessie
#desactivar automount antes de ejecutar chdkptp
gsettings set org.mate.desktop.media-handling automount "false"
gsettings set org.mate.desktop.media-handling automount-open "false"
#activar automount luego de cerrar chdkptp
gsettings set org.mate.desktop.media-handling automount "true"
gsettings set org.mate.desktop.media-handling automount-open "true"
Nota: se puede explorar con dconf-editor
(se instala con apt-get install dconf-editor
) la ruta correcta desde la GUI.
Desactivar en forma permanente. ATENCION: tenga en cuenta que ya no se montarán automaticamente las cámaras al conectarlas a la PC (iniciando gphoto2 por ejemplo) si remueve estos paquetes
sudo apt-get remove --purge gvfs-backends
verificar si el paquete está instalado o no en el sistema:
dpkg -s gvfs-backends|grep Status
Ejecutar chdkptp
ir al directorio chdkptp
cd /ruta/a/chdkptp
antes de ejecutar se deben definir algunas variables de entorno
export LUA_PATH="./lua/?.lua"
si IUP está compilado pero no instalado en el sistema se debe especificar la ruta:
export LD_LIBRARY_PATH=/path/to/iup:/path/to/cd
ejecutar chdkptp en interfase gráfica
./chdkptp
links
Documentación de chdkptp
- USAGE.TXT la principal referencia
- En el foro CHDK -> alternative ptp client
- El wiki de chdkptp
- Una referencia básica sobre script de chdktp: assembla.com -> Scripting_Guide
- Referencia sobre comandos para PTP: chdk.wikia.com -> PTP_Scripting
- http://chdk.wikia.com/wiki/Lua
http://chdk.wikia.com/wiki/Script_commands
chdk.wikia.com -> Chdkptp in headless linux Dockstar - remote control
Referencias relacionadas
- Sobre como setear valores de la configuracion desde el script: chdk.wikia.com -> Script_commands#set_config_value
- imagemagick.org -> How to convert raw image to compressed tif?
Proyectos derivados/relacionados
- pypi.python.org -> pyptpchdk A Python module that implements the Picture Transfer Protocol, including support for CHDK extensions.
- Proyecto aparentemente derivado de chdkptp: photowall
- github.com/markvdb -> [Software triggering on Debian](GNU Linux https://github.com/markvdb/diybookscanner/wiki/Software-triggering-on-Debian-GNU-Linux)
- github.com/markvdb -> test_keypedal.sh
no CHDK
- PSRemote http://www.breezesys.com/PSRemote/features.htm
- capture http://capture.sourceforge.net/
Apuntes varios
chdkptp as library
- https://chdk.setepontos.com/index.php?topic=6231.660
- https://github.com/tudelft/chdkptp
patch
- https://gist.github.com/adongy/55b232cfb759df4920bd
- https://github.com/jbaiter/chdkptp.py/blob/master/chdkptp_module.diff
test lua include
- https://gist.github.com/adongy/e203e9025379b1b3c90d
- https://gist.github.com/adongy/5985b6b4611edf5858bc
- http://codegist.net/code/how-to-run-chdkptp/
sobre fpic error
- https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options
- https://stackoverflow.com/questions/19364969/compilation-fails-with-relocation-r-x86-64-32-against-rodata-str1-8-can-not
https://askubuntu.com/questions/673259/restricting-mtp-devices-from-being-mounted-by-a-user-group
udev monitor
udevadm monitor -u
Reload the rules
udevadm control -R
Blocking MTP and PTP
cd /usr/lib/gvfs
Remove the execute permission for
gvfsd-mtp
gvfs-mtp-volume-monitor(for safer side)
gvfsd-gphoto2
gvfs-gphoto2-volume-monitor(for safer side)
Dispositivos manejados por gvfs
gvfs-mount -li
otras rutas para intentar bloquear el servicio (Exec=/bin/false)
/usr/share/dbus-1/services/org.gtk.vfs.GPhoto2VolumeMonitor.service
--> $HOME/.local/share/dbus-1/system-services/...
mas info
- https://wiki.gnome.org/Projects/gvfs/doc
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544148
https://github.com/markvdb/diybookscanner/wiki/Software-triggering-on-Debian-GNU-Linux#avoiding-competition-for-our-cameras
gvfs-gphoto2-volume-monitor
# ps -Al | grep gvfs
0 S 1000 2547 1 0 80 0 - 75972 - ? 00:00:00 gvfs-udisks2-vo
0 S 1000 2570 1 0 80 0 - 109493 - ? 00:00:00 gvfsd-trash
0 S 1000 2582 1he device and you have read/write ac 0 80 0 - 51681 - ? 00:00:00 gvfs-mtp-volume
0 S 1000 2586 1 0 80 0 - 50692 - ? 00:00:00 gvfs-goa-volume
0 S 1000 2590 1 0 80 0 - 57404 - ? 00:00:00 gvfs-gphoto2-vo
0 S 1000 2595 1 0 80 0 - 75076 - ? 00:00:00 gvfs-afc-volume
0 S 1000 2673 1 0 80 0 - 32728 - ? 00:00:00 gvfsd-metadata
0 S 1000 3196 1 0 80 0 - 52546 - ? 00:00:00 gvfsd
# killall gvfs-gphoto2-volume-monitor
https://chdk.setepontos.com/index.php?topic=6254.500
ACTION!="add", GOTO="libgphoto2_rules_end"
SUBSYSTEM!="usb", GOTO="libgphoto2_usb_end"
ENV{ID_USB_INTERFACES}=="", IMPORT{builtin}="usb_id"
ENV{ID_USB_INTERFACES}=="*:060101:*", ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="PTP", MODE="0664", GROUP="plugdev"
LABEL="libgphoto2_rules_end"
is now in /etc/udev/rules.d/40-libgphoto2-6.rules
ACTION!="add", GOTO="libgphoto2_rules_end"
SUBSYSTEM!="usb", GOTO="libgphoto2_usb_end"
ENV{ID_USB_INTERFACES}=="", IMPORT{builtin}="usb_id"
ENV{ID_USB_INTERFACES}=="*:060101:*", ATTR{idVendor}=="04a9", MODE="0664", GROUP="plugdev", GOTO="libgphoto2_rules_end"
ENV{ID_USB_INTERFACES}=="*:060101:*", ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="PTP", MODE="0664", GROUP="plugdev"
LABEL="libgphoto2_rules_end"
mas en * ! https://forum.diybookscanner.org/viewtopic.php?t=3146 * ! http://chdk.setepontos.com/index.php?topic=10664.msg115401#msg115401 * ! http://chdk.setepontos.com/index.php?topic=6231.msg100671#msg100671 * http://chdk.wikia.com/wiki/Getting_CHDKPTP_on_BeagleBone_Black_to_work
http://articulo.mercadolibre.com.ar/MLA-481116439-camara-digital-canon-powershot-a2200-hd-muy-poco-uso-_JM
http://chdk.setepontos.com/index.php?topic=6231.msg83548#msg83548
chdkptp -n -e"!mc=require('multicam')" -e"!mc:connect()" -e"!mc:start()" -e"!return mc:cmdwait('rec')" -e"!return mc:cmdwait('preshoot')" -e"!return mc:cmdwait('shoot')" -e"!return mc:cmdwait('play')" -e"!mc:cmd('exit')"
Rather than passing loads of -e commands, you would write your own lua file, and then do something like chdkptp -e"!dofile('myfile.lua')"
http://chdk.setepontos.com/index.php?topic=6231.msg88342#msg88342 una lista de dependencias para compilar
http://chdk.setepontos.com/index.php?topic=6231.msg90966#msg90966 multiple shot
http://chdk.setepontos.com/index.php?topic=6231.msg94386#msg94386
cmo ejecutar lua script
tip: exec sys.sleep(1000)
para generar una pausa en la ejecución
http://chdk.setepontos.com/index.php?topic=6231.msg95265#msg95265 FYI, you may find it more convenient to put the commands into a file rather than using so many -e commands. e.g you could put the following in myfile.chdkptp
delete DCIM
exec sys.sleep(2000)
luar switch_mode_usb(1); set_zoom(0); set_prop(6, 3); shoot(); switch_mode_usb(0)
exec sys.sleep(2000)
mdl DCIM /tmp/chdk-download
exec sys.sleep(2000)
delete DCIM
sudo sh /home/pi/chdkptp/chdkptp-sample.sh -c -rmyfile.chdkptp
http://chdk.setepontos.com/index.php?topic=6231.msg98677#msg98677 You can get an idea of the time required for each step using the
set cli_time=true
http://chdk.setepontos.com/index.php?topic=6231.msg99844#msg99844 =t0=get_tick_count();press('shoot_half');repeat sleep(10) until get_shooting();t1=get_tick_count();click('shoot_full');repeat sleep(10) until not get_sho oting(); t2=get_tick_count();return t1-t0,t2-t1
Sobre el problema de los permisos en usb http://chdk.setepontos.com/index.php?topic=6231.msg89252#msg89252
Re: CHDK PTP multiple instances http://chdk.setepontos.com/index.php?topic=8769.msg91611#msg91611
___> !devs=chdk.list_usb_devices()
___> !con1=chdku.connection(devs[1])
___> !return con1:connect();
=true
___> !con2=chdku.connection(devs[2])
___> !return con2:connect()
=true
http://chdk.setepontos.com/index.php?topic=8454.0 Controlling two cameras at once creates some additional complications, but it is possible. You have two options: 1) Run two instances of the client program. This should work, but you have to be careful because some commands might reset the connection to the other camera. This could be done with either ptpcam or chdkptp client. 2) Control both cameras using a single instance of the chdkptp client. chdkptp supports connecting to multiple cameras in it's Lua API, but the normal CLI and GUI only support one camera at a time. This means you'd need to use Lua code to control the cameras.
http://chdk.wikia.com/wiki/Chdkptp_in_headless_linux_Dockstar_-remotecontrol
/usr/src/chdkptp/lua# /usr/src/chdkptp/chdkptp -i -c
<con> =switch_mode_usb(1)
<con> lua set_zoom(3)
<con> lua shoot()
<con> =switch_mode_usb(0)
<con> download A/DCIM/133CANON/IMG_7440.JPG /var/www/7440.jpg
<con>q
list remote http://chdk.setepontos.com/index.php?topic=8600.10
connected: Canon DIGITAL IXUS 30, max packet size 64
con> =return os.listdir('A/')
5:return:table:{[1]="CHDK",[2]="DISKBOOT.BIN",[3]="DCIM",[4]="badpixel.bin",[5]="ver.req",[6]="paramdmp.log",[7]="MISC",[8]="chdk_ixus30_111006am.tar.gz",}
con 5>
averiguar el nombre de la ultima foto
- CDKPTP with Auto-file-transfer-to-PC for the S90 - Developmental Version http://chdk.setepontos.com/index.php?topic=9067.0
- Downloading a picture that was just taken with chdkptp http://chdk.setepontos.com/index.php?topic=6872.0
- Need advice on how to use CHDKPTP to retrieve file name of last picture taken http://chdk.setepontos.com/index.php?topic=10458.0
- http://chdk.wikia.com/wiki/PTP_Extension/ptpcam_Examples
- get_exp_count http://chdk.wikia.com/wiki/Script_commands
https://github.com/markvdb/diybookscanner/blob/master/misc/test_keypedal.sh
CHDK as a high-end webcam http://chdk.setepontos.com/index.php?topic=332.0
download A/DCIM/133CANON/IMG_7440.JPG /var/www/7440.jpg q