PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Raspbian C/C++ : fertige OpenFileDialog oder SaveFileDialog Komponenten



HaWe
16.06.2016, 10:03
hallo,
aus gegebenem Anlass:

Kennt jemand für Raspbian g++ C/C++ fertige OpenFileDialog oder SaveFileDialog Komponenten, wie man sie als Windows- oder sogar schon als MSDOS-C++-Komponenten kennt (Borland Turbo C++, C++ Builder, MS Visual C++)
die man im eigenen C/C++ Programm #includen kann,
die dann als PopUp-Menüs zur Verfügung stehen
und in denen man per Cursor und Maus Files auswählen, ggf. browsen, scrollen, und ins eigene Programm übernehmen kann
(Grafik- oder oder ASCII-Text-Screen) ?

schorsch_76
16.06.2016, 11:34
Da kann ich QT empfehlen:

http://doc.qt.io/qt-5/qfiledialog.html

https://www.youtube.com/watch?v=tKdfpA74HYY

HaWe
16.06.2016, 14:20
danke!
...und das läuft auf dem Raspi?
Das sind ja nun irre viele Buchstaben auf der Website -

- wie wird es auf dem Raspi installiert?

- und kannst du mir vlt auch ein einfaches Anwendungsbeispiel für den raspi zeigen?


Angenommen im Verz
/home/pi/test/
befinden sich mehrere .txt und auch andere files -
z.B. zum Ausprobieren:
test.txt // enthält: nur ein Test!
mary.txt // enthält: Mary had a little lamb
hello.txt // enthält: Hello World!

Die habe ich bereits als Muster erstellt.


- wie kriegt man jetzt mit QT in einem eigenen C/C++ Programm die Auswahl zum Laden / Öffnen eines Files in einem Directory?

- nächster Schritt, ebenfalls mit QT: wenn das File geladen ist, wie geht "speichern unter..." einem anderen Namen, samt Auswahl bereits vorhandener Dateien?

Sisor
16.06.2016, 15:53
Nagel mich nicht drauf fest, aber ich meine Raspbians Visualisierung läuft mit GTK+2.
Wäre daher naheliegend, mit GTK zu arbeiten.
GtkFileChooserDialog (https://developer.gnome.org/gtk2/stable/GtkFileChooserDialog.html)

HaWe
16.06.2016, 15:59
hmm - zugegeben, das erschlägt mich jetzt ziemlich.
Was muss ich jetzt alles machen für eine simple OpenFileDialog oder SaveFileDialog Abfrage in meinem simplen C++ Programm?
Eine kurze Schritt-für-Schritt-Anleitung wäre nicht schlecht, um das Programm innerhalb 10-15 Minuten schreiben und starten zu können... ;)

Bei mir läuft die Standard-GUI von Jessie, an Grafik habe ich openVG installiert.

Sisor
16.06.2016, 17:16
Zum Einstieg:
Hello World GTK+ Raspbian (https://www.youtube.com/watch?v=Z5ljaf7c-tg)

schorsch_76
16.06.2016, 17:34
Hier ist dazu ein Tutorial

https://wiki.qt.io/Qt_for_Beginners#Our_first_window

HaWe
16.06.2016, 17:37
aha, jetzt sehe ich klarer - das hat seine eigene IDE, und man muss zwangsweise dann sein ganzes Projekt darin schreiben.

Das wollte ich allerdings nicht.

Ich will weiter mit Geany programmieren, und nur die OpenFileDialog oder SaveFileDialog Komponenten einbinden, damit ich einfach per Auswahl-Menüs Datei/Verzeichnis-Zugriffe (öffnen, speichern) machen kann.

schorsch_76
16.06.2016, 17:59
31708


Und hier ist der Code

main.cpp


#include <QApplication>
#include <QPushButton>

#include <QWidget>
#include <QFileDialog>

#include <iostream>

class Window : public QWidget
{
Q_OBJECT
public:
explicit Window(QWidget *parent = 0);

private slots:
void slotButtonClicked();

private:
QPushButton *m_button;
};

Window::Window(QWidget *parent)
: QWidget(parent)
{
// Set size of the window
setFixedSize(100, 50);

// Create and position the button
m_button = new QPushButton("Hello World", this);
m_button->setGeometry(10, 10, 80, 30);

connect(m_button, SIGNAL (clicked()), this, SLOT (slotButtonClicked()));
}

void Window::slotButtonClicked()
{
QString fname = QFileDialog::getOpenFileName(
this,
tr("Open File"),
"/home", "");
std::cout << fname.toUtf8().constData() << std::endl;
}

#include "main.moc"

int main(int argc, char **argv)
{
QApplication app (argc, argv);

Window wnd;
wnd.show();

return app.exec();
}


CMakeLists.txt


cmake_minimum_required(VERSION 2.8.11)

PROJECT(test C CXX)

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Widgets REQUIRED)

include_directories(${Qt5Widgets_INCLUDE_DIRS})

SET(SRCS
main.cpp
)

SET(LIBS
${Qt5Widgets_LIBRARIES}
)


# Executable
ADD_EXECUTABLE(qt-test ${SRCS} )

# Linking
TARGET_LINK_LIBRARIES(qt-test ${LIBS})



Dateisystem schaut so aus:

georg@xps:/tmp$ tree qttest/
qttest/
├── CMakeLists.txt
└── main.cpp

0 directories, 2 files


Bauen


georg@xps:/tmp$ cd qttest
georg@xps:/tmp/qttest$ mkdir build
georg@xps:/tmp/qttest$ cd build/
georg@xps:/tmp/qttest/build$ cmake ..
-- The C compiler identification is GNU 5.3.1
-- The CXX compiler identification is GNU 5.3.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/qttest/build
georg@xps:/tmp/qttest/build$ make
Scanning dependencies of target qt-test_automoc
[ 25%] Automatic moc for target qt-test
Generating main.moc
[ 25%] Built target qt-test_automoc
Scanning dependencies of target qt-test
[ 50%] Building CXX object CMakeFiles/qt-test.dir/main.cpp.o
[ 75%] Building CXX object CMakeFiles/qt-test.dir/qt-test_automoc.cpp.o
[100%] Linking CXX executable qt-test
[100%] Built target qt-test
georg@xps:/tmp/qttest/build$


AUsführen:

georg@xps:/tmp/qttest/build$ ./qt-test


- - - Aktualisiert - - -

Du must auch nicht die IDE nutzen. Ich nutze Emacs und cmake. cmake weil diese makefiles leicht zu schreiben sind und die Makros die Libs und Includes leicht finden.

HaWe
16.06.2016, 18:09
herzlichen Dank für deine Mühe! :)
cmake, make und makefile habe ich allerdings noch nie genutzt und weiß auch gar nicht, was die machen und wie die funktionieren.
Ich nutze nur die Geany Einstellungen für Compile und Build, die sehen dann bei mir so ähnlich wie hier aus:

Geany settings for compile:

g++ -Wall -pthread -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -c "%f" -lshapes -lwiringPi -lrt

Geany settings for make/build:

g++ -Wall -pthread -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -o "%e" "%f" -lshapes -L/opt/vc/lib -lOpenVG -lEGL -lwiringPi -lrt


Lässt sich das für QTCode entsprechend ändern?

schorsch_76
16.06.2016, 18:14
Das was du in deine geany Einstellungen gemacht hast ist praktisch schon ein kleines Makefile ;)

Du kannst das auch mit geany machen. Machst dein Verzeichnis qttest. Erstellst build. "cmake ..". (was ich eben oben gemacht habe).

Für compile machst du dann
"make -C /tmp/qttest/build/"

clean
"make -C /tmp/qttest/build/ clean"

Wenn du das CmakeLists.txt änderst, wird das bei make automatisch aktualisiert (bsp. neues cpp file). Sehr praktisch!

Edit: Für cmake gibts auch ein Gui:

cmake-curses-gui - curses based user interface for CMake (ccmake)
cmake-qt-gui - Qt4 based user interface for CMake (cmake-gui)

curses (shell)
Qt-gui: Eben Gui

Edit2: Deine Libs machst du dann eben bei LIBS rein
-lrt
-lpthread

etc

Include directories .. siehe Oben ...

HaWe
16.06.2016, 18:30
danke!
1 Sache habe ich wschl irgendwo verpasst:
was muss ich wie auf dem Pi installieren, damit QT läuft?
apt-get install
oder
git git-clone
oder wie immer man so was macht
(bin blutiger Linux-Anfänger)

schorsch_76
16.06.2016, 18:41
Du brauchst:

sudo apt-get install cmake-qt-gui build-essential qt5-default

Das sollte alles sein.

(Denke Jessie brauchst du für Qt5. )

HaWe
16.06.2016, 18:50
jap, ist installiert.
(Habe allerdings vorher sudo apt-get update und upgrade vergessen, hoffe das macht nichts)


jetzt als nächstes das hier...?


cd qttest
mkdir build
cd build/
cmake ..

schorsch_76
16.06.2016, 18:53
Habs gerade auf dem Pi3 ausprobiert. Geht da auch. Mit Qt kannst du auch Qnwendungen für BSD und Windows schreiben. Cross Plattform ;)



pi@raspberry-pi3:~/qttest$ mkdir build
pi@raspberry-pi3:~/qttest$ cd build/
pi@raspberry-pi3:~/qttest/build$ cmake ..
-- The C compiler identification is GNU 4.9.2
-- The CXX compiler identification is GNU 4.9.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/qttest/build
pi@raspberry-pi3:~/qttest/build$ make
Scanning dependencies of target qt-test_automoc
[ 33%] Automatic moc for target qt-test
Generating main.moc
[ 33%] Built target qt-test_automoc
Scanning dependencies of target qt-test
[ 66%] Building CXX object CMakeFiles/qt-test.dir/main.cpp.o
[100%] Building CXX object CMakeFiles/qt-test.dir/qt-test_automoc.cpp.o
Linking CXX executable qt-test
[100%] Built target qt-test
pi@raspberry-pi3:~/qttest/build$


- - - Aktualisiert - - -

Ja, genau. Die zwei Files sollten dann unter qttest liegen. Das update spielt hier gar keine Rolle ;)

HaWe
16.06.2016, 18:57
muss ich vorher eine makefile- Datei erstellen / copy/pasten ?
oder einfach nur die 4 Zeilen, ohne irgendwas selber zu schreiben?

cd qttest
mkdir build
cd build/
cmake ..

- - - Aktualisiert - - -

cd qttest
Datei nicht gefunden
:(

schorsch_76
16.06.2016, 18:59
Na die zwei Dateien CMakeLists.txt und main.cpp von der vorherigen site sollen unter qttest liegen. Du brauchst hier nichts anderes schreiben. nach cmake ..



# das erstellt das build verzeichnis. Hier liegt dann die Anwendung und die zwischendateien.
cd qttest
mkdir build
cd build/
cmake ..

# das startet den build prozess
make


- - - Aktualisiert - - -

Na die zwei Dateien CMakeLists.txt und main.cpp von der vorherigen site sollen unter qttest liegen. Du brauchst hier nichts anderes schreiben. nach cmake ..



# das erstellt das build verzeichnis. Hier liegt dann die Anwendung und die zwischendateien.
cd qttest
mkdir build
cd build/
cmake ..

# das startet den build prozess
make

HaWe
16.06.2016, 19:00
also vorhr doch sicher noch
mkdir qttest :?:

- - - Aktualisiert - - -

ich finde kein qttest

schorsch_76
16.06.2016, 19:01
Ja klar ... (10 zeichen)

HaWe
16.06.2016, 19:03
wie?
verstehe nicht
wo ist denn das hinkopiert worden?

bitte noch mal alles nacheinander.

als allererstes habe ich ja eingegeben
sudo apt-get install cmake-qt-gui build-essential qt5-default

aber da gibts jetzt kein qttest Verzeichnis

schorsch_76
16.06.2016, 19:07
Das apt-get install ... installiert nur die Tools und die Libs.

zur Erklärung:
1. Erstellen des Quellcode Verzeichnisses
mkdir qttest

2. Erstellen der Datei main.cpp
cd qttest
geany main.cpp

(hier kopierst du den Quellcode von der ersten Seite rein. Abschnitt: main.cpp

3. Erstellen der Datei CMakeLists.txt
geany CMakeLists.txt

(hier kopierst du den Quellcode von der ersten Seite rein. Abschnitt: CMakeLists.txt

4. Erstellen des build Verzeichnisses
mkdir build

5. Bau vorbereiten
cd build
cmake ..

6. bauen
make

HaWe
16.06.2016, 19:20
finde mich nicht zurecht :(

- - - Aktualisiert - - -

ich verwende auch niemals cmake und auch keine Kommandozeilen (und habe ich auch nicht vor) !
gibt es kein install.exe, das alles fix und fertig installiert?

- - - Aktualisiert - - -

wie kann ich QT wieder deinstallieren?

schorsch_76
16.06.2016, 19:22
Das apt-get install IST das install.exe.

qt wieder entfernen

sudo apt-get purge cmake-qt-gui build-essential qt5-default
sudo apt-get autoremove

HaWe
16.06.2016, 19:25
ok, ich deinstalliere wieder, das ist mir zu kompliziert mit dem geany main.cpp und dem cmake und den ganzen Texten

ich meinte mit install.exe ein programm, das alles macht, ohne den cmake Teil selber machen zu müssen, da werde ich ja ganz konfus.
Ich will ja nur die OpenFile und SaveFile Sachen benutzen per #include, nichts weiter sonst.

schorsch_76
16.06.2016, 19:40
Auch unter Windows installiert dein Setup nur die Tools. Deine Projektdateien legt es auch nicht an.

Auch Visual Studio Enterprise (https://www.visualstudio.com/en-us/products/visual-studio-enterprise-vs.aspx) für 5000-6000€ legt keine Einzige Projektdatei an.

HaWe
16.06.2016, 19:46
hmmm - was sind Projektdateien?

ich habe bisher nur mit Tools gearbeitet wie der Arduino IDE
Visual Studio (oder gar Eclipse!!! **schauder**) ist mir auch viiiel zu kompliziert.

schorsch_76
16.06.2016, 19:48
main.cpp???????

Dein Quellcode?????

Das was du programmieren willst?

HaWe
16.06.2016, 21:39
ich habe noch gar keinen Quellcode, den muss ich erst noch entwickeln.
Im Prinzip muss der FileOpen / FileSaveDialog hier eingearbeitet werden:

https://www.roboternetz.de/community/threads/69238-wav-Dateien-Programieren-von-Wiedergabe-und-Aufnahme?p=628178&viewfull=1#post628178

um *.wav Dateien auf der SD zu öffnen, um sie weiter bearbeiten zu können,
mit diesem Menü:

Kommando-Center:
==============
0 Soundfile *.csv in Programm öffnen / laden (FileOpenDialog)
1 Soundfile *.wav in Programm öffnen / laden (FileOpenDialog)
2 Soundfile *.wav öffnen / abspielen + Plot (FileOpenDialog)
3 Sound aufnehmen per Micro / SoundCard
4 akt. Sound (Array im RAM) abspielen + Plot
5 akt. Sound optimieren (noise/cut)
6 akt. Sound (im RAM) als File speichern unter... (FileSaveDialog)
7 akt. Sound an FFT + Plot
8 akt. Sound cross correlation mit 1 wav File (FileOpenDialog)
9 akt. Sound cross correlation mit allen *.wav Files (auto)

- - - Aktualisiert - - -

was ich im Prinzip suche ist etwas simples minimalistisches wie


#include <filedialogs.h>

//....
FILE *fp;

fp = OpenFileDialog(); // File auswählen über ein Mini-Filebrowser-Auswahlmenü

// anstelle von explizit:
// fp = fopen( "/home/pi/test/mytextfile.txt" , "r" );
// dann weiter mit Datenverarbeitung dieses Files, dann:

SaveFileDialog(fp); // speichern unter einem anderen Namen per File-Browserfenster
// dann:

close(fp);

i_make_it
17.06.2016, 05:52
Apt-get install kann man nicht mit einer install.exe von windows vergleichen, eher mit msiexec.
also:
Win: msiexec /i (paket)
Unix: apt-get install (paket)
(Irgendwoher muß Microsoft ja die Ideen für seine Sachen nehmen)
Win: msiexec /x (paket)
Unix: apt-get purge (paket)

Auch bei QT muß man wie bei Visual C++ auch das Programmieren selbst machen.
Und auch wie bei MS Visual Studio, ist QT Designer eine komplette IDE.
Also keinerlei Unterschied zur Windows Welt.

Wer es mag, kann aber QT auch ohne QT Designer nutzen und es per Plugin in Eclipse einbinden.

HaWe
17.06.2016, 08:28
das ist viel zu kompliziert, und Eclipse schon gleich gar nicht. Es muss viel einfacher gehen (Installation meinetwegen über apt-get, aber dann ohne weitere Nacharbeiten, cmake, make, makefile, tonnenweise zusätzliche #includes und Hilfsprozeduren, was auch immer):


#include <filedialogs.h>

FILE *fp;

fp = OpenFileDialog(); // File auswählen und öffnen über ein Filebrowser-Auswahlmenü

// jetzt den Inhalt der Datei bearbeiten, und dann neu speichern...:

SaveFileDialog(fp); // speichern unter einem anderen Namen per File-Browserfenster

// dann: schließen
close(fp);


IDE habe ich: Geany.



(in Delphi musste man nur ein Filemenü-Objekt auf seine Canvas ziehen, das war alles)

Mxt
17.06.2016, 08:56
Am nächsten kommt dem wohl das in Beitrag #4 und #6 erwähnte.

Aber auch in dem in #6 verlinken Video kommt statt cmake das Programm pkg-config zum Einsatz. Das wird direkt in Compileraufrufen verwendet und baut die ganzen includes und Einstellungen für die Verwendung einer Bibliothek automatisch zusammen, wenn diese bei pkg-config registriert ist. Keine Ahnung, ob sich das mit Geany verträgt.

HaWe
17.06.2016, 09:03
Ziel muss sein:
nur 1 Zeile schreiben, um einen File per Mini-Browserfenster auszuwählen und zu öffnen - alles andere ist zu kompliziert.

fp = OpenFileDialog(); // File auswählen und öffnen über ein Filebrowser-Auswahlmenü

makec und makefile und make: niemals!
ich trage ggf. die neuern extra-Parameter noch zusätzlich in Geany ein (was mittlerweile schon lang genug ist, um die komplette British Library zu füllen
- und bei Delphi, Borland C++ Builder und Arduino IDE musste ich mich gottseidank noch nichtmal damit rumschlagen! ) :-/

peterfido
17.06.2016, 12:24
Hallo,

das geht evtl. über eine Pipe. zenity bietet einen FileDialog für X-Server. Da ich keine GUI nutze, kann ich es nicht testen.

Folgender Aufruf sollte den gewählten Dateinamen zurückgeben:


zenity --file-selection

Die Ausgabe dann halt per Pipe einlesen. Das Programm läuft dann halt nur, wenn zenity auch installiert ist.

HaWe
17.06.2016, 12:27
hallo,
ich bin nicht sicher, ob ich das richtig verstehe, denn ich kenne auch keinen X Server.
ist das so in der Art zu verstehen...?

FILE * fp;
fp << system("zenity --file-selection");

:?:

peterfido
17.06.2016, 12:46
Hallo,
X-Server ist der 'Fensterverwalterer'. Normal startest Du die GUI mit startX.
Eine Pipe mache ich normal mit popen auf.

Hier ein ungetestetes Beispiel aus dem Kopf



FILE *f;

if(!(f = popen("zenity --file-selection", "r"))){
strcpy(Dateiname,"Falsch");
exit(1);
}
char Text[1024]="";
fgets(Text, sizeof(Text), f);
fclose(f);
if(strlen(Text)<2){ //Kein Dateiname übergeben / Abbrechen geklickt, etc
strcpy(Dateiname,"Falsch");
}else{ //Dateiname sollte in Text stehen.
strcpy(Dateiname,Text);
}



Damit würde ich mal probieren eine gewünschte Funktion zu bauen.

HaWe
17.06.2016, 16:41
danke, das sieht ja sehr bekannt aus:
f = popen("zenity --file-selection", "r");
... genau gleich wie fopen!
f = fopen("/path/filename", "r");
schön, wenn man auf was bekanntes trifft :)

Bevor ich jetzt 3 Stunden brauche , um zenity zu installieren, und dann klappts doch nicht ....

Könnte das vlt einmal jemand vor-testen, der bereits zenity bei sich auf dem Pi installiert hat?

peterfido
17.06.2016, 17:02
Hallo,

bei meinen Raspis ist das drauf. Evtl. ist es standard.?. Einfach mal den Befehl aufrufen und schauen, was passiert.

Sisor
17.06.2016, 20:07
Zenity scheint auf Debian Betriebssystemen Standard zu sein.
Hab ein bischen mit Peterfido's Code gespielt:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
FILE *f;
char Dateiname[1024] = "";
int c;


/* Zenity für File-Dialog benutzen */
freopen("/dev/null", "w", stderr); // Warnungen von zenity ignorieren
if(!(f = popen("zenity --file-selection", "r"))){
strcpy(Dateiname, "Falsch");
exit(1);
}
freopen("/dev/tty", "w", stderr);
fgets(Dateiname, sizeof(Dateiname), f);
fclose(f);
if(strlen(Dateiname) < 2){ //Kein Dateiname übergeben / Abbrechen geklickt, etc
strcpy(Dateiname, "Falsch");
}


/* Inhalt der Datei ausgeben */
printf("Dateiname: %s", Dateiname);
Dateiname[strlen(Dateiname)-1] = '\0'; // '\n'-Stringende entfernen
f = fopen(Dateiname, "r");
if (f) {
while ((c = getc(f)) != EOF)
putchar(c);
fclose(f);
}
}

HaWe
18.06.2016, 10:15
bei der letzten GT Deinstallation scheint er mir das g++ gelöscht zu haben: ich kann nicht mehr mit g++ compilieren ("g++ not found")

was ein Sch**ss.
Jetzt muss ich erst mal schauen, wo ich ein altes Pi Image neu auf SD laden kann :mad:
Linux: ich könnte ko**en. :mad:

peterfido
18.06.2016, 10:34
Hallo,

zum programmieren / rumtesten nutze ich einen extra Pi. Dieser hat alles Mögliche drauf und deinstalliert wird da normal nix. Wenn die Programme dann auf einem anderen Pi laufen sollen und irgendwas fehlt, installiere ich es da nach.

Wenn nur g++ fehlt, dann kannst Du das auch einzeln nachinstallieren.

Als Backup habe ich ein BASH-Script, welches auf dem NAS immer den kompletten Inhalt der SD-Karte ablegt. Das Script ist auf allen Raspis vorhanden und wird vor / nach größeren Änderungen ausgeführt.



#!/bin/bash
#
# DS mounten
#
MountPoint=/tmp/ds
RaspiName=RaspiBPlus_

RaspiName=$RaspiName$(date +%Y%m%d-%k%M%S)
echo $RaspiName

service rpcbind start
if [ ! -e $MountPoint ]; then
mkdir $MountPoint
fi

mount -t nfs 192.168.2.15:/volume1/Raspberry $MountPoint

dd if=/dev/mmcblk0 of=$MountPoint/$RaspiName.img bs=1M

umount $MountPoint
service rpcbind stop

Wichtig ist, dass die Konsole / SSH Session nicht geschlossen wird, während das Script läuft. Zurückspielen geht per Windows Tool win32diskimager-binary06.

HaWe
18.06.2016, 13:09
Danke, aber 1. nutze ich niemals ssh oder putty (Teufelszeug!) und zum anderen kann ich zwar eigene Programme, aber keine Systemfiles verwalten wegen dem besch**** sudo Mist.
Von Zeit zu Zeit mache ich ein SD Image mit win32diskimager, aber ich bin mir nicht sicher, wie alt das letzte ist.
Ideal wäre es, wenn man lokal auf dem Pi während des laufenden Betriebs ein Image auf eine 2.SD im USB Card Reader speichern könnte.
Das war zwar im letzten Jessie Release 2016-04-10 vorgesehen, funktionierte aber nicht (hang-up beim Booten).
Außerdem hat mir das 2016-04-10 alle Entries in config files zerschossen und meine Keyboardabfrage mit kbdhit (via termio / termios) funktionierte auch nicht mehr.
Ein absolutes Desaster mit diesen Pis und den Linux Updates.

Mal gucken, ich versuche gerade ein Image vom April neu zu laden.

- - - Aktualisiert - - -

So, altes Image aufspielen hat geklappt!

@peterfido, @sisor:



die Programme funktionieren bestens! Tausend Dank!
Werde weiter experimentieren :cool:

peterfido
18.06.2016, 13:28
Hallo,



Ideal wäre es, wenn man lokal auf dem Pi während des laufenden Betriebs ein Image auf eine 2.SD im USB Card Reader speichern könnte.


Meine Bash lässt sich auf jeden Pfad hin anpassen. Die ist ja für den laufenden Betrieb gedacht. Allerdings sollte dann keine GUI laufen, da sonst mitten im Sichern eine Datei geändert wird und diese dann korrupt ist. Das erklärt dann evtl. Deine Boot-Probleme. Zur Sicherheit könnte man auch vorher noch einige Dämonen anhalten und anschließend wieder starten.

Wenn Du eh auf eine SD-Karte sichern möchtest, kannst Du gleich eine Kopie statt eines Images erstellen. Das ist aber ein anderes Thema.