Arrrr, Sorry für das ganze Hin und Her... Noch besser als ein negative Lookahead wäre ein schlichter .:
<File>\s+now/best\s+size/ext\s+(\S+)\s+(\d+|\-)/(\d+|\-)\s+.+\s+Done\.
(und sorry, dass das hier in eine offtopic Regex-Diskussion abdriftete...)
Hallo Sepp,
erst einmal vielen Dank für die vielen und schnellen Infos. An einen Mediaplayer hatte ich auch schon gedacht (hatte es mit VLC probiert, aber irgendwie nicht ans Laufen bekommen). Dann müsste ich hier vielleicht noch einmal schauen. Das andere klingt zwar sehr spannend, aber bis ich das am fliegen habe, gibt es diese Möglichkeiten vielleicht auch schon nicht mehr :-).
Natürlich könnte ich dies alles einfacher mittlerweile über Spotify lösen, aber die gute alte Box und die drehende Mechanik möchte ich noch am Laufen haben und es ist ein schönes Bastelobjekt bei dem ich schon viel ausprobiert und gelernt habe.
Gruß
Michael
Hi, ich beschäftige mich schon ein paar Tage damit, und habe meine Frage - leider erfolglos - auch schon in einem anderen Forum gestellt.
Mein Notebook hat folgenden Sensor: ID 138a:0097 Validity Sensors, Inc.
So weit, so gut. Damit er funktioniert, verwende ich "als Treiber" folgende Libs:
https://github.com/uunicorn/python-validity
https://wiki.archlinux.org/title/fprint
https://wiki.archlinux.org/title/PAM#PAM_base-stack
https://wiki.archlinux.org/title/SDDM#Using_a_fingerprint_reader
Damit der Sensor funktionierte, hatte ich mit validity-sensors-firmware zuerst ein factory-reset durchgeführt.
Nun bin ich dabei, PAM und SDDM für den Login per Fingerabdruck zu konfigurieren. U. A. meine /etc/pam.d/system-auth sieht so aus:
#%PAM-1.0
auth sufficient pam_fprintd.so max_tries=1 timeout=10 debug
auth sufficient pam_unix.so
auth required pam_faillock.so preauth
# Optionally use requisite above if you do not want to prompt for the password
# on locked accounts.
-auth [success=2 default=ignore] pam_systemd_home.so
auth [success=1 default=bad] pam_unix.so try_first_pass nullok
auth [default=die] pam_faillock.so authfail
auth optional pam_permit.so
auth required pam_env.so
auth required pam_faillock.so authsucc
# If you drop the above call to pam_faillock.so the lock will be done also
# on non-consecutive authentication failures.
-account [success=1 default=ignore] pam_systemd_home.so
account required pam_unix.so
account optional pam_permit.so
account required pam_time.so
-password [success=1 default=ignore] pam_systemd_home.so
password required pam_unix.so try_first_pass nullok shadow sha512
password optional pam_permit.so
-session optional pam_systemd_home.so
session required pam_limits.so
session required pam_unix.so
session optional pam_permit.so
(sufficient-Zeilen hab ich hinzugefügt)
Gewünschtes Verhalten:
Ich werde zuerst nach dem Fingerabdruck gefragt, wenn das nicht funktioniert oder nach 10 Sekunden, dann soll ich nach dem Passwort gefragt werden.
Aktuelle Verhalten:
Ich werde nach Neustart zuerst nach Passwort gefragt, muss dann einmal (leer) Enter eingeben und werde dann erst nach Fingerabdruck gefragt.
Weiß jemand vielleicht, woran das liegt? Danke schonmal
Ich habe da reingeguckt (oder wenigstens: "quergelesen"), aber hätte gerne eine Bestätigung meiner Hypothese von einer Person, die davon mehr versteht als ich...
Könnte mich ja auch irren...
Der -Handschuh war natürlich nicht wortwörtlich zu verstehen. Ich hatte nicht vor, jemanden zu schlagen oder zu verletzen oder zu schädigen. Ich bin ganz liiiep.
@SeppJ Ach nein, es liegt doch nicht am >>... Das Programm braucht nach einiger Zeit einfach immer mehr Speicher, auch wenn ich nach /dev/null umleite... Ich hab das jetzt ein paar Tage lang beobachtet.
Aber ungeachtet dessen ist dieses Thema eigentlich schon done.
Hallo zusammen,
meine Hoffnung liegt gerade in der Schwarmintelligenz
Ich versuche ein USB gerät zu öffnen, dessen VendorID und pID mir bekannt ist um die Daten anschließend zu Verarbeiten.
Weil (wie ich das gelesen habe) libusb_open_device_with_vid_pid(...) keine guten Error werte gibt habe ich einen Umweg eingebaut.
MEIN CODE:
Ich erzeuge Erst eine Liste aller Devices und nehme mir das richtige Device heraus:
int main() {
libusb_context *context;
libusb_device **list;
size_t count = 0;
libusb_device *found;
const int vid = 1234;
libusb_init(&context);
count = libusb_get_device_list(context, &list);
assert(count > 0);
for (size_t idx = 0; idx < count; ++idx) {
libusb_device *device = list[idx];
libusb_device_descriptor desc;
libusb_get_device_descriptor(device, &desc);
if (desc.idVendor == vid) {
found = device;
}
}
libusb_free_device_list(list, count);
anschließend erzeuge ich die Verbindung mit dem USB gerät über einen Handle:
libusb_device_handle *devHanle;
int isOpen = libusb_open(found, &devHanle);
std::cout<<isOpen<<std::endl;
danach will ich die Daten auslesen und erst ein mal nur ausgeben
unsigned char data[2048];
int actual_length;
print(str(isOpen));
libusb_bulk_transfer(devHanle, 2, data, sizeof(data), &actual_length, 500);
std::cout<<data<<std::endl;
Mein Problem
an der 2. stelle ist 'isOpen' -3 ist... also 'libusb_open(...)' den folgen Error hat
LIBUSB_ERROR_ACCESS if the user has insufficient permissions
Die Frage:
kann ich mir rechte geben ohne das irgendwo in einer Datei nieder zu schreiben?
Das soll am ende ein portables Programm werden, das wenn möglich keine Änderungen in permanente Files schreibt und auch keine sudo rechte braucht.
Wie bekomme ich das hin?
Betriebssystem:
Habe Ubuntu (22.04). soll am ende für Mac, Linux und Windows laufen.
Liebe grüße und danke für die Antworten
EvD
@firefly sagte in (Ubunut) libs über x64 Linux VM für Linux arm64 downloaden?:
Und wenn apt nicht verfügbar ist, dann ist sehr wahrscheinlich auch dpkg nicht verfügbar.
Aber das alles ist pure spekulation da uns nicht bekannt ist, um was für ein system es sich da handelt.
du hast recht, dpkg ist auch nicht vorhanden...
@Cardiac danke für deine anleitung, das habe ich soweit auch "glaube" ich so gemacht. hmm.. und wo liegen dann die libs der jeweiligen archtiektur!? das habe ich nicht geblickt;)
normalerweise bin/ oder sbin/ oder k.a.:) wei kann ich das den auflisten?
@Tyrdal sagte in lesen/schreiben für shared memory:
@john-0 Umso besser, schick ihm das Buch.
Es geistern im Netz Kopien herum, wenn es denn einen Bedarf gibt. Ok, bei Archive.org wird man fündig.
@firefly sagte in make bricht mit Fehlermeldungen ab:
Ok stimmt nicht ganz das es schon aus dem support gefallen ist aber der support endet am
June 30, 2022.
https://wiki.debian.org/LTS
Und wegen mysql workbench.
Für debian 10 hab ich das hier gefunden:
das werden zwei varianten beschrieben (einmal nativ und einmal via snap)
https://idroot.us/install-mysql-workbench-debian-10/
Die snap variante funktioniert auch mit debian 11
Aber nicht auf meiner Kiste.
Hallo @SeppJ ,
danke für die Antwort.
Zu Deiner Frage. Nur was ganz einfaches; es werden drei Sprachen (deutsch, englisch und französisch) unterstützt und dementsprechende Text ausgegeben.
Die letzten Tage habe ich mich selbst darum bemüht ncursesw in einem Demo Programm zum Laufen zu bekommen. Leider ist die Doku für die wide Version nicht sonderlich gut. Es ist zwar jede Funktion sauber dokumentiert, aber es findet sich im Netz kaum etwas was korrekt beschreibt wie man die wide Version programmiert. Daher muss man sich die passenden Funktionen mühsam zusammensuchen. Falls es da Fragen gibt …
@john-0 sagte in Keyboard-Events für das Window-Resizing an ein Terminal Fenster unter Linux senden:
Nein, das muss nicht der Fall sein. Es gibt eine ganze Klassen von Anwendungen bei der das nicht der Fall ist: daemons. Ein daemon ist explizit von jedem Terminal entkoppelt. IO geht dann nur noch in Dateien und zum Steuerung eines daemons muss man explizit Signals verwenden. Damit das dann funktioniert muss man Signal Handler schreiben.
Ja, ich gehe an dere Stelle mal von dem Normalfall aus. Daemons sind da ein Spezialfall, schon allein wegen dem double-fork.
Anwendungen haben üblicherweise keinerlei Kontrolle über das Terminal. Das ergab früher auch keinerlei Sinn, weil das Terminal eine spezielle Hardware war, die man auch nicht per Programmcode in einen anderen Hardwaremodus schalten konnte. Bei einem Softwareterminal muss man die proprietären Protokolle des GUI Toolkits benutzen. Da würde ich aktuell auf DBus tippen.
Ja, das meinte ich. Als normaler User im System hat man da nicht viele Möglichkeiten. Das auch aus gutem Grund, mit derartigen Sachen kann man viel Blödsinn anstellen.
Allgemein wenn das Terminal programmieren will, sollte man die ncurses Library nutzen.
Naja, oder man verwendet eben ANSI Sequenzen. ncurses ist dagegen schon fast zu einfach und zieht es eben diverse Abhängigkeiten mit rein, wo ich mir nicht ganz sicher bin, ob man das haben will. Unicode ist dann auch etwas nervig.
@Tyrdal sagte in Windows IDE zur Linux cross compiling (debugging):
Wie meinst du das? Wsl2 ist im Grunde eine VM. Da musst du wie bei anderen VMs odfer Hardware halt ein OS drauf tun. In diesem speziellen Fall sind das bestimmte Linux-Distros. Auf denmen kannst du installieren was du lustig bist, inklusive Compiler, Skriptsprachen etc. Der XServer muss schon seit jeher auf der Maschine laufen auf der die Apps angezeigt werden sollen. Das wäre hier die Windows Maschine und die hat keinen mitgeliefert.
Sorry.. hab nicht nachgedacht bei der Antwort:) .. danke für deine Feedback
Ich habe jetzt die Pfade ohne "VS Platzhalter" eingesetzt, also quasi hart-kodiert. So funktioniert es. Nicht schön, aber ich kann bauen UND linken. Vielleicht gibt es doch irgendwelche Probleme mit Tilde, oder dergleichen.
Danke für eure Hilfe
lg Torsten
Hallo ToRein,
ich habe mir den Fall mal angeschaut und wäre von selbst nicht auf die Lösung gekommen.
Jetzt habe ich mal einen Blick auf deine Lösung geworden, interessant! Danke dafür!
@Quiche-Lorraine Vielen herzlichen Dank für deine Mühe! Das hätte ich nun wirklich nicht erwartet.
Ich war früher schon in einigen Foren unterwegs, aber so Hilfsbereit wie hier alle sind - das habe ich nicht erwartet. Ich bin allen sehr dankbar!
Ich werde es testen und werde anschließend berichten wie es gelaufen ist. Vielen Dank auch für den Link zur Doku von std::string auf cppreference - diese werde ich mir durchlesen. Dankeschön!
Da ich jetzt doch schon zu viel Zeit damit verbracht habe, dachte ich, ich poste hier eine Lösung auf eine eigene Frage.
Als ich eine externe Festplatte kaufte und an den Raspi 4 anschloss, viel mir auf, dass immer ein (spin-) Drehgeräusch bestand, egal ob die Fesplatte gemountet war oder nicht.
Das automount funktionierte bisher stabil mit systemd:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /media/hdd-linux auto noauto,nofail,x-systemd.automount,x-systemd.idle-timeout=5s,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s,_netdev,x-systemd.requires=network-online.target 0 2
Mit uhubctl und usb_drives_with_no_phantom_load versuchte ich dann lange den USB-Strom abzustellen und anzustellen, wenn das Laufwerk ungemountet bzw. gemountet wurde, was aber immer Fehler hervorbrachte.
Hier (rasberry-pi4-seagate-external-usb3-0-no-spin-down) fand ich dann die Lösung mit Seagate Dashboard wo es sich unter Windows einstellen lässt. Nachher habe ich es wieder an den Raspi angeschlossen und das Drehgeräusch verschwand, gemäss der eingestellten Zeit.