jim-easterbrook / python-gphoto2

Python interface to libgphoto2
GNU Lesser General Public License v3.0
359 stars 59 forks source link

Unable to run without sudo (Access denied libusb_open) #85

Closed abegus closed 4 years ago

abegus commented 5 years ago

Doing a --summary call. Any success running from a VM (virtualbox) using a USB connection? It works when I do sudo, but not regular user.

id -Gn returns: tty dialout vboxusers

0.038639 gp_port_info_list_count (2): 34 regular entries available. 0.038641 gp_port_new (2): Creating new device... 0.038644 gp_port_info_list_get_info (2): Getting info of entry 0 (38 available)... 0.038700 gp_port_set_settings (2): Setting settings... 0.038704 gp_port_info_list_get_info (2): Getting info of entry 1 (38 available)... 0.038768 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.038771 gp_port_set_settings (2): Setting settings... 0.038773 gp_port_info_list_get_info (2): Getting info of entry 2 (38 available)... 0.038812 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.038818 gp_port_set_settings (2): Setting settings... 0.038825 gp_port_info_list_get_info (2): Getting info of entry 3 (38 available)... 0.038880 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.038884 gp_port_set_settings (2): Setting settings... 0.038885 gp_port_info_list_get_info (2): Getting info of entry 4 (38 available)... 0.038933 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.038936 gp_port_set_settings (2): Setting settings... 0.038938 gp_port_info_list_get_info (2): Getting info of entry 5 (38 available)... 0.038982 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.038986 gp_port_set_settings (2): Setting settings... 0.038987 gp_port_info_list_get_info (2): Getting info of entry 6 (38 available)... 0.039031 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039034 gp_port_set_settings (2): Setting settings... 0.039036 gp_port_info_list_get_info (2): Getting info of entry 7 (38 available)... 0.039080 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039083 gp_port_set_settings (2): Setting settings... 0.039084 gp_port_info_list_get_info (2): Getting info of entry 8 (38 available)... 0.039128 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039131 gp_port_set_settings (2): Setting settings... 0.039133 gp_port_info_list_get_info (2): Getting info of entry 9 (38 available)... 0.039176 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039180 gp_port_set_settings (2): Setting settings... 0.039181 gp_port_info_list_get_info (2): Getting info of entry 10 (38 available)... 0.039225 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039228 gp_port_set_settings (2): Setting settings... 0.039230 gp_port_info_list_get_info (2): Getting info of entry 11 (38 available)... 0.039273 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039276 gp_port_set_settings (2): Setting settings... 0.039278 gp_port_info_list_get_info (2): Getting info of entry 12 (38 available)... 0.039321 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039324 gp_port_set_settings (2): Setting settings... 0.039326 gp_port_info_list_get_info (2): Getting info of entry 13 (38 available)... 0.039369 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039372 gp_port_set_settings (2): Setting settings... 0.039374 gp_port_info_list_get_info (2): Getting info of entry 14 (38 available)... 0.039416 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039419 gp_port_set_settings (2): Setting settings... 0.039421 gp_port_info_list_get_info (2): Getting info of entry 15 (38 available)... 0.039464 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039467 gp_port_set_settings (2): Setting settings... 0.039469 gp_port_info_list_get_info (2): Getting info of entry 16 (38 available)... 0.039512 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039515 gp_port_set_settings (2): Setting settings... 0.039517 gp_port_info_list_get_info (2): Getting info of entry 17 (38 available)... 0.039559 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039563 gp_port_set_settings (2): Setting settings... 0.039564 gp_port_info_list_get_info (2): Getting info of entry 18 (38 available)... 0.039607 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039694 gp_port_set_settings (2): Setting settings... 0.039696 gp_port_info_list_get_info (2): Getting info of entry 19 (38 available)... 0.039744 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039747 gp_port_set_settings (2): Setting settings... 0.039749 gp_port_info_list_get_info (2): Getting info of entry 20 (38 available)... 0.039792 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039798 gp_port_set_settings (2): Setting settings... 0.039800 gp_port_info_list_get_info (2): Getting info of entry 21 (38 available)... 0.039844 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039847 gp_port_set_settings (2): Setting settings... 0.039849 gp_port_info_list_get_info (2): Getting info of entry 22 (38 available)... 0.039891 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039894 gp_port_set_settings (2): Setting settings... 0.039896 gp_port_info_list_get_info (2): Getting info of entry 23 (38 available)... 0.039939 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039942 gp_port_set_settings (2): Setting settings... 0.039944 gp_port_info_list_get_info (2): Getting info of entry 24 (38 available)... 0.039986 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.039989 gp_port_set_settings (2): Setting settings... 0.039991 gp_port_info_list_get_info (2): Getting info of entry 25 (38 available)... 0.040034 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.040037 gp_port_set_settings (2): Setting settings... 0.040039 gp_port_info_list_get_info (2): Getting info of entry 26 (38 available)... 0.040081 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.040084 gp_port_set_settings (2): Setting settings... 0.040086 gp_port_info_list_get_info (2): Getting info of entry 27 (38 available)... 0.040128 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.040131 gp_port_set_settings (2): Setting settings... 0.040133 gp_port_info_list_get_info (2): Getting info of entry 28 (38 available)... 0.040175 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.040179 gp_port_set_settings (2): Setting settings... 0.040180 gp_port_info_list_get_info (2): Getting info of entry 29 (38 available)... 0.040223 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.040226 gp_port_set_settings (2): Setting settings... 0.040228 gp_port_info_list_get_info (2): Getting info of entry 30 (38 available)... 0.040270 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.040274 gp_port_set_settings (2): Setting settings... 0.040275 gp_port_info_list_get_info (2): Getting info of entry 31 (38 available)... 0.040318 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.040321 gp_port_set_settings (2): Setting settings... 0.040323 gp_port_info_list_get_info (2): Getting info of entry 32 (38 available)... 0.040365 gp_port_set_timeout (2): Setting port timeout to 500 milliseconds. 0.040368 gp_port_set_settings (2): Setting settings... 0.040370 gp_port_info_list_get_info (2): Getting info of entry 33 (38 available)... 0.041260 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.041265 gp_port_set_settings (2): Setting settings... 0.041268 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:001,003, (new int=0, conf=-1, alt=-1) port usb:001,003 0.041270 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.041272 gp_abilities_list_detect_usb(2): Auto-detecting USB cameras... 0.041513 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.041545 gp_libusb1_find_device_lib (2): Looking for USB device (vendor 0x4b0, product 0x438)... found. 0.041566 gp_libusb1_find_device_lib (2): Detected defaults: config 1, interface 0, altsetting 0, inep 81, outep 02, intep 83, class 06, subclass 01 0.041568 gp_abilities_list_detect_usb(2): Found 'Nikon DSC D5500' (0x4b0,0x438) 0.041571 gp_port_free (2): Freeing port... 0.041573 gp_port_close (2): Closing port... 0.041654 gp_camera_set_abilities (2): Setting abilities ('Nikon DSC D5500')... 0.041661 load_settings (2): Creating gphoto config directory ('/home//.gphoto') 0.041672 verify_settings (2): Can't open settings file '/home/.gphoto/settings' for reading. 0.041674 load_settings (2): Loading settings from file '/home//.gphoto/settings'. 0.041677 load_settings (2): Can't open settings file '/home//.gphoto/settings' for reading. 0.041679 gp_setting_set (2): Setting key 'model' to value 'Nikon DSC D5500' (gphoto2) 0.041682 save_settings (2): Saving 1 setting(s) to file "/home//.gphoto/settings" 0.041685 save_settings gphoto2-setting.c:234: Can't open settings file for writing. 0.041687 gp_port_info_list_lookup_path(2): Looking for path 'usb:001,003' (38 entries available)... 0.041690 gp_port_info_list_get_info (2): Getting info of entry 33 (38 available)... 0.041692 gp_camera_set_port_info (2): Setting port info for port 'Universal Serial Bus' at 'usb:001,003'... 0.042514 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.042519 gp_port_set_settings (2): Setting settings... 0.042522 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:001,003, (new int=0, conf=-1, alt=-1) port usb:001,003 0.042524 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.041272 gp_abilities_list_detect_usb(2): Auto-detecting USB cameras... 0.041513 gp_libusb1_find_device_by_class_lib(2): Looking for USB device (class 0x29a, subclass, 0xffffffff, protocol 0xffffffff)... 0.041545 gp_libusb1_find_device_lib (2): Looking for USB device (vendor 0x4b0, product 0x438)... found. 0.041566 gp_libusb1_find_device_lib (2): Detected defaults: config 1, interface 0, altsetting 0, inep 81, outep 02, intep 83, class 06, subclass 01 0.041568 gp_abilities_list_detect_usb(2): Found 'Nikon DSC D5500' (0x4b0,0x438) 0.041571 gp_port_free (2): Freeing port... 0.041573 gp_port_close (2): Closing port... 0.041654 gp_camera_set_abilities (2): Setting abilities ('Nikon DSC D5500')... 0.041661 load_settings (2): Creating gphoto config directory ('/home//.gphoto') 0.041672 verify_settings (2): Can't open settings file '/home//.gphoto/settings' for reading. 0.041674 load_settings (2): Loading settings from file '/home//.gphoto/settings'. 0.041677 load_settings (2): Can't open settings file '/home//.gphoto/settings' for reading. 0.041679 gp_setting_set (2): Setting key 'model' to value 'Nikon DSC D5500' (gphoto2) 0.041682 save_settings (2): Saving 1 setting(s) to file "/home//.gphoto/settings" 0.041685 save_settings gphoto2-setting.c:234: Can't open settings file for writing. 0.041687 gp_port_info_list_lookup_path(2): Looking for path 'usb:001,003' (38 entries available)... 0.041690 gp_port_info_list_get_info (2): Getting info of entry 33 (38 available)... 0.041692 gp_camera_set_port_info (2): Setting port info for port 'Universal Serial Bus' at 'usb:001,003'... 0.042514 gp_port_set_timeout (2): Setting port timeout to 5000 milliseconds. 0.042519 gp_port_set_settings (2): Setting settings... 0.042522 gp_libusb1_update (2): (old int=0, conf=-1, alt=-1) port usb:001,003, (new int=0, conf=-1, alt=-1) port usb:001,003 0.042524 gp_libusb1_update (2): lowlevel libusb1 port not yet opened, no need for libusb changes 0.042526 gp_setting_set (2): Setting key 'port' to value 'usb:001,003' (gphoto2) 0.042529 save_settings (2): Saving 2 setting(s) to file "/home//.gphoto/settings" 0.042533 save_settings gphoto2-setting.c:234: Can't open settings file for writing. 0.042548 gp_camera_init (2): Initializing camera... 0.042556 gp_libusb1_find_device_lib (2): Looking for USB device (vendor 0x4b0, product 0x438)... found. 0.042577 gp_libusb1_find_device_lib (2): Detected defaults: config 1, interface 0, altsetting 0, inep 81, outep 02, intep 83, class 06, subclass 01 0.042579 gp_camera_init (2): Loading '/usr/lib/x86_64-linux-gnu/libgphoto2/2.5.9/ptp2'... 0.043108 gp_port_open (2): Opening USB port... 0.043113 gp_libusb1_open (2): () 0.043124 gp_libusb1_open libusb1.c:382: 'libusb_open (port->pl->d, &port->pl->dh)' failed: Access denied (insufficient permissions) (-3) 0.043183 gp_context_error (0): An error occurred in the io-library ('I/O problem'): No error description available 0.044049 gp_camera_free (2): Freeing camera... 0.044054 gp_port_free (2): Freeing port... 0.044056 gp_port_close (2): Closing port... 0.044118 gp_filesystem_reset (2): resetting filesystem 0.044121 gp_filesystem_lru_clear (2): Clearing fscache LRU list... 0.044123 gp_filesystem_lru_clear (2): fscache LRU list already empty 0.044125 delete_all_folders (2): Internally deleting all folders from '/'... 0.044126 lookup_folder (2): Lookup folder '/'... 0.044128 lookup_folder (2): Found! / is 0x556be5109410 0.044130 recurse_delete_folder (2): Recurse delete folder 0x556be5109410//

jim-easterbrook commented 5 years ago

What are you trying to run? I imagine there are several places where a virtual machine might fail to access a USB device attached to the host, but none of them would be a bug in python-gphoto2.

jim-easterbrook commented 5 years ago

Looking at it more closely I see the following:

0.041682 save_settings (2): Saving 1 setting(s) to file "/home//.gphoto/settings"
0.041685 save_settings gphoto2-setting.c:234: Can't open settings file for writing.

This is nothing to do with USB, but points clearly to a problem. Whatever you're running is trying to save its settings to a file in the user's home directory, but doesn't know the username for some reason.