libusb_open - LIBUSB_ERROR_ACCESS

Benutzeravatar
Garfield
Beiträge: 207
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Ich beschäfitge mich etwas mit der libusb und wollte damit lsusb nachstelllen.

Code: Alles auswählen

procedure TfrmUSB.FormClose(Sender: TObject);
begin
  libusb_exit(ctx);
end;

procedure TfrmUSB.btnDeviceClick(Sender: TObject);
var
  aDevList   : pplibusb_device;
  aDev       : plibusb_device;
  aDevDesc   : libusb_device_descriptor;
  aDevCount  : Int64;
  aErrorCode : Integer;
  i          : Integer;
  aDevHandle : plibusb_device_handle;
  aManufacturer : Array[0..255] of AnsiChar;
  aProduct      : Array[0..255] of AnsiChar;
begin
  if (mmoDevice.Lines.Count > 0)
  then mmoDevice.Lines.Add('');
  mmoDevice.Lines.Add('Start Suche');
  // Init
  aDevList := nil;
  aDev     := nil;
  // Die Geräteliste holen
  aDevCount := libusb_get_device_list(ctx, aDevList);
  mmoDevice.Lines.Add(Format('Anzahl Geräte: %d', [aDevCount]));
  // Wenn mehrere Geräte...
  if (aDevCount > 0)
  then begin
    i := 0;
    while (i < aDevCount)
    do begin
      // Gerät holen
      aDev := aDevList[i];
      if aDev <> nil
      then begin
        // Beschreibung holen
        aErrorCode := libusb_get_device_descriptor(aDev, aDevDesc);
        if (aErrorCode < 0)
        then begin
          mmoDevice.Lines.Add(Format('%2.d - %s', [aErrorCode, libusb_error_name(aErrorCode)]));
        end
        else begin
          // Gerät mit VID und PID öffnen
          aDevHandle := nil;
          aDevHandle := libusb_open_device_with_vid_pid(ctx, aDevDesc.idVendor, aDevDesc.idProduct);
          if (aDevHandle <> nil)
          then begin
            // Den Hersteller- und Produktnamen holen
            FillChar(aManufacturer, SizeOf(aManufacturer), 0);
            libusb_get_string_descriptor_ascii(aDevHandle, aDevDesc.iManufacturer, @aManufacturer[0], SizeOf(aManufacturer));
            FillChar(aProduct, SizeOf(aProduct), 0);
            libusb_get_string_descriptor_ascii(aDevHandle, aDevDesc.idProduct, @aProduct[0], SizeOf(aProduct));
            mmoDevice.Lines.Add(Format('- Bus %.3d Device %.3d: %.4x:%.4x %s, %s',
                                       [libusb_get_bus_number(aDev), libusb_get_device_address(aDev),
                                        aDevDesc.idVendor, aDevDesc.idProduct,
                                        aManufacturer, aProduct]));
          end
          else begin;
            mmoDevice.Lines.Add(Format('- Bus %.3d Device %.3d: %.4x:%.4x',
                                       [libusb_get_bus_number(aDev), libusb_get_device_address(aDev),
                                        aDevDesc.idVendor, aDevDesc.idProduct]));
          end;
        end;
      end;
      inc(i);
    end;
  end;
  libusb_free_device_list(aDevList, 0);
  mmoDevice.Lines.Add('Fertig.');
end;

procedure TfrmUSB.FormCreate(Sender: TObject);
var
  aVersion: plibusb_version;
begin
  ctx := nil;
  libusb_init(ctx);

  stbVersion.Panels.Items[0].Width := 70;
  stbVersion.Panels.Items[1].Width := 130;
  stbVersion.Panels.Items[2].Width := 200;

  aVersion := libusb_get_version();

  stbVersion.Panels.Items[0].Text  := ' libUSB';
  stbVersion.Panels.Items[1].Text  := Format('Version %d.%d.%d',
                                             [aVersion^.major, aVersion^.minor, aVersion^.micro]);
  stbVersion.Panels.Items[2].Text  := aVersion^.describe;
end;
Um die Strings für Manufacturer und Product zu bekommen, wird ein Handle benötigt. Weder mit libusb_open noch mit libusb_open_device_with_vid_pid bekomme ich eines. Es gibt nur den Fehler -3 LIBUSB_ERROR_ACCESS - Access denied (insufficient permissions).

Nach der Diskussion viewtopic.php?t=17423 denke ich, dass es vermutlich an der libusb.pas liegt. Ich denke, ich werde eine neue erstellen, in welcher nur das benötigte enthalten sein wird.
Dateianhänge
LibUsb.zip
(114.01 KiB) 42-mal heruntergeladen
Bildschirmfoto vom 2025-11-14 09-19-10.png
Bildschirmfoto vom 2025-11-14 09-19-10.png (68.21 KiB) 334 mal betrachtet
Gruß Garfield

Stevie
Beiträge: 185
Registriert: Di 27. Feb 2024, 22:40

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Stevie »

... so etwas wie SELinux können wir als Fehlerquelle ausschließen? Ansonsten mal mit 'setenforce 0' temporär deaktiveren und noch mal versuchen.

Benutzeravatar
theo
Beiträge: 11057
Registriert: Mo 11. Sep 2006, 19:01

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von theo »

Naja, die Doku lässt ja schon Ärger vermuten:

libusb_open_device_with_vid_pid()
Convenience function for finding a device with a particular idVendor/idProduct combination.

This function is intended for those scenarios where you are using libusb to knock up a quick test application - it allows you to avoid calling libusb_get_device_list() and worrying about traversing/freeing the list.

This function has limitations and is hence not intended for use in real applications: if multiple devices have the same IDs it will only give you the first one, etc.


https://libusb.sourceforge.io/api-1.0/g ... e04617392e

Benutzeravatar
Garfield
Beiträge: 207
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Stevie hat geschrieben: Fr 14. Nov 2025, 09:58 ... so etwas wie SELinux können wir als Fehlerquelle ausschließen?
Das ein Tuxedo-Laptop mit Ubuntu 24.04 von Tuxedo angepasst. Da ist zum Beispiel Tilix als Konsole drauf, welches bei mir keine Lazarus-Konsolenanwendungen findet.
theo hat geschrieben: Fr 14. Nov 2025, 10:46 Naja, die Doku lässt ja schon Ärger vermuten: ...
Ja, dass habe ich auch gedacht. Davor hatte ich libusb_open versucht. Aber da hatte ich dasselbe Ergebnis.
https://libusb.sourceforge.io/api-1.0/g ... e07e76d1b0
Gruß Garfield

Stevie
Beiträge: 185
Registriert: Di 27. Feb 2024, 22:40

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Stevie »

Garfield hat geschrieben: Fr 14. Nov 2025, 12:19
Stevie hat geschrieben: Fr 14. Nov 2025, 09:58 ... so etwas wie SELinux können wir als Fehlerquelle ausschließen?
Das ein Tuxedo-Laptop mit Ubuntu 24.04 von Tuxedo angepasst. Da ist zum Beispiel Tilix als Konsole drauf, welches bei mir keine Lazarus-Konsolenanwendungen findet.
Das sagt erst mal nicht darüber aus, ob SELinux an oder aus ist. Mag ja auch keinerlei Relevanz haben, aber meiner Erfahrung nach sind so manche scheinbar unerklärliche Zugriffsverweigerungen am Ende zustande gekommen, weil der Zugriff der SELinux-Konfiguration nicht gepasst hat.

Benutzeravatar
theo
Beiträge: 11057
Registriert: Mo 11. Sep 2006, 19:01

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von theo »

Vielleicht mal ein Konsolenprogramm schreiben und mit sudo ausführen.
Es gibt ja viel Zeugs in diesem Zusammenhang:
Gruppenzugehörigkeiten des Users, /etc/udev/rules.d/, ...

Benutzeravatar
Garfield
Beiträge: 207
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Stevie hat geschrieben: Fr 14. Nov 2025, 12:47 Das sagt erst mal nicht darüber aus, ob SELinux an oder aus ist. ...
setenforse und sestatus kennt Tilix angeblich nicht.
theo hat geschrieben: Fr 14. Nov 2025, 14:06 Vielleicht mal ein Konsolenprogramm schreiben und mit sudo ausführen.
Ja, Sollte ich tun.

Da merke ich wieder, dass ich so gut wie keine Ahnung von Linux habe. :?
Dateianhänge
Bildschirmfoto vom 2025-11-14 14-09-24.png
Bildschirmfoto vom 2025-11-14 14-09-24.png (33.49 KiB) 254 mal betrachtet
Gruß Garfield

Stevie
Beiträge: 185
Registriert: Di 27. Feb 2024, 22:40

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Stevie »

... mag sein, dass /usr/sbin nicht in Deinem Pfad steckt. Versuch's mal hiermit:

Code: Alles auswählen

$ /usr/sbin/sestatus

Mathias
Beiträge: 7112
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Mathias »

Ich habe dein Programm im obersten Post getestet, es läuft sowohl unter Linux, so wie auch mit Win10 in der VB. Bei wine werden keine Geräte gefunden.
Nach der Diskussion viewtopic.php?t=17423 denke ich, dass es vermutlich an der libusb.pas liegt. Ich denke, ich werde eine neue erstellen, in welcher nur das benötigte enthalten sein wird.
Da kannst auch meine Bindung verwenden, die ist ganz frisch.
https://github.com/sechshelme/Lazarus-G ... usb_1.0.27
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Garfield
Beiträge: 207
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Wenn es bei Dir läuft, dann dürfte es an meinem System liegen. Mit Deinen Bindungen sieht es bei mir genauso wie oben aus. Das heißt, ich bekomme das Handle nicht und damit keine Strings.
Dateianhänge
Bildschirmfoto vom 2025-11-14 16-22-31.png
Bildschirmfoto vom 2025-11-14 16-22-31.png (27.21 KiB) 221 mal betrachtet
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 207
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Stevie hat geschrieben: Fr 14. Nov 2025, 14:54 ... mag sein, dass /usr/sbin nicht in Deinem Pfad steckt. Versuch's mal hiermit:

Code: Alles auswählen

$ /usr/sbin/sestatus
Ich habe das Gefühl, dass ein Ubuntu von Tuxedo nicht das Gelbe vom Ei ist. Habe im Moment keinen Zugriff auf einen anderen Rechner.
Dateianhänge
Bildschirmfoto vom 2025-11-14 17-40-50.png
Bildschirmfoto vom 2025-11-14 17-40-50.png (33.66 KiB) 214 mal betrachtet
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 207
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

theo hat geschrieben: Fr 14. Nov 2025, 14:06 Vielleicht mal ein Konsolenprogramm schreiben und mit sudo ausführen.
Es gibt ja viel Zeugs in diesem Zusammenhang:
Gruppenzugehörigkeiten des Users, /etc/udev/rules.d/, ...
Habe mir https://wiki.lazarus.freepascal.org/Con ... _Pascal/de angesehen und festgestellt, dass der Fehler vor meiner Tastatur sitzt. Ich habe in der Konsole nur den Projektnamen eingegeben ohne "./". Der "Double Commander" Kann damit leider auch nichts anfangen.
./project1
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 207
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Da habe ich wieder einiges gelernt. Mit Sudo bekomme ich das Handle, aber die Informationen sind andere als die,, welche lsusb auswirft. Also mal sehen, was es da noch gibt.
Dateianhänge
Bildschirmfoto vom 2025-11-14 17-59-28.png
Bildschirmfoto vom 2025-11-14 17-59-28.png (64.73 KiB) 202 mal betrachtet
Gruß Garfield

Mathias
Beiträge: 7112
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Mathias »

Bei mir kommen einige mehr USB-Geräte als bei dir:

Code: Alles auswählen

Start Suche
Anzahl Geräte: 13
- Bus 004 Device 001: 1D6B:0003 Linux 6.8.0-87-generic xhci-hcd, Linux 6.8.0-87-generic xhci-hcd
- Bus 003 Device 002: 2109:3431 , 
- Bus 003 Device 001: 1D6B:0002 Linux 6.8.0-87-generic xhci-hcd, xHCI Host Controller
- Bus 002 Device 001: 1D6B:0003 Linux 6.8.0-87-generic xhci-hcd, Linux 6.8.0-87-generic xhci-hcd
- Bus 001 Device 008: 8087:0029 , 
- Bus 001 Device 006: 05E3:0608 , 
- Bus 001 Device 005: 046D:C050 Logitech, 
- Bus 001 Device 003: 046A:0011 , 
- Bus 001 Device 004: 1902:8301 Generic, Generic
- Bus 001 Device 002: 0409:005A , 
- Bus 001 Device 009: 048D:5702 ITE Tech. Inc., ITE Device
- Bus 001 Device 007: 058F:6362 Generic, 
- Bus 001 Device 001: 1D6B:0002 Linux 6.8.0-87-generic xhci-hcd, xHCI Host Controller
Fertig.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Garfield
Beiträge: 207
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

An den Laptop ist im Moment nichts weiter angesteckt.
Gruß Garfield

Antworten