Wie kann man in root -User wechseln?

Status
Nicht offen für weitere Antworten.

Imyourdaddy

Mitglied
Hallo, ich hab ein C-Programm mit dem nur als root mit USB geräte kommuniziern kann...diesesProgramm möchte ich in ein Java programm einbauen...wie würde das funktionieren?
Hab mir im Forum das mit runtime exec angeschaut und rufe das Programm so auf:

Code:
import java.io.*;


public class send {
	public static void main(String[] args) {
		try	{
		      Process p = Runtime.getRuntime().exec("/home/ogu1234/workspace/HomeAutProject/C-Send/send 05 b1 01 1f 50");
		}
		    catch(IOException e){
		      System.out.println("Fehler: " + e);
		    } 
	}
}

Funktioniert das so? und wie kann ich vorher root werden?

mfg[/code]
 

Bleiglanz

Gesperrter Benutzer
dürfte nicht gehen: egal ob mit sudo oder sonstwie, das Passwort muss immer interaktiv eingegeben werden

dazu müsstest du schon eine interaktive Shell aufmachen und mit den Ein- und Ausgabestreams dass Passwort "rüberschicken"...
 

Imyourdaddy

Mitglied
Ok, dann mach ich das so...vielleicht funktioniert deshalb das Programm nicht?

hab es ein bisschen erweitert...
Code:
import java.io.*;


public class send {
	public static void main(String[] args) {
		try	{
		      Process p = Runtime.getRuntime().exec("/home/ogu1234/workspace/HomeAutProject/C-Send/send 05 b1 01 1f 50");
		
		BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
	      String buffer = null;
	      while ((buffer = in.readLine()) != null)
	      {
	         System.out.println(buffer);
	      }		
	      in.close();
		}
		    catch (IOException e){
		      System.out.println("Fehler: " + e);
		      e.printStackTrace(); 
		    } 
	}
}


Wenn ich eine konsole öffne und
/home/ogu1234/workspace/HomeAutProject/C-Send/send 05 b1 01 1f 50

eingebe so werden die 5 Bytes an das Gerät gesendet...in Java funktioniert das einfach nicht... wisst ihr warum? Ich hab das eclipse als root gestartet also bin ich ja root,oder?

Wie kann ich mir sonst die Ausgabe des C-Progammes in Java holen...so geht es leider nicht...
lg
 

Mag1c

Top Contributor
Hi,

ich würde dir empfehlen, den Spieß umzudrehen und dir als Nutzer die Rechte zu geben, auf USB-Geräte zuzugreifen zu können. Ist sauberer, sicherer und erspart dir eben diese Kopfstände.

Gruß
Mag1c
 

Mag1c

Top Contributor
Hi,

ja richtig, das hat mit Eclipse nix zu tun ... bezog sich eher auf den Anfang des Threads :wink:

hast du mal den ErrorStream ausgelesen ?

Braucht das "send" irgendwelche Environment-Variablen ?

Gruß
Mag1c
 

Imyourdaddy

Mitglied
Nein, eigentlich nicht... wie kann msn errorstream auslesen? Also das send funktioniert so, dass man nur den Befehl in die Konsole eingeben muss und der Reest8initialisierung usw. findet in C statt. Hab das Programm jetzt umgeschrieben, jetztz braucht man nur noch ./send in die konsole eingeben und das Programm sendet einen fixes Bytearray...
Wie geht das mit dem errorstream?
 

Mag1c

Top Contributor
Hi,

Process#getErrorStream

hatte aber selbst vor kurzem das Problem, daß ich nicht gleichzeitig InputStream und ErrorStream auslesen konnte. Hab noch nicht nachgeforscht, wieso. Also am besten du ersetzt erstmal den InputStream durch den ErrorStream.

Gruß
Mag1c
 

Imyourdaddy

Mitglied
komischerweise habe ich jetzt einfach die p.getInputStream mit getErrorstream ersetzt und jetzt funktioniert es...is ja witzig...

Nun zum nächsten Problem...das gleiche geht ntürlich auch mit empfangen...hier gibt es im C-Programm ein Byte-Array in das die empfangenen Daten gespeichert werden und das natürlich auch asugegeben werden kann... wie kreig ich dieses Byte in Java zurück????
 

Mag1c

Top Contributor
Nur so als Idee:

du könntest doch den C-Teil so aufbauen, daß er alles, was über stdin kommt auf an das USB-Gerät schickt und alles, was vom USB-Gerät kommt, auf stdout rausschreibt. Und das ganze in einer Endlosschleife mit definierter Abbruchbedingung. Das Teil könntest du von Java aus einmal starten und dann immer wieder über den OutputStream mit Daten füttern und die Ergebnisse über den InputStream abholen. (Hängt natürlich vom Protokoll deines(r) Geräte(s) ab, ob das funktioniert).

Und noch ganz anders ... ist das USB-Gerät über eine USB-Serial-Bridge angeschlossen ? Wenn ja, kannste alles auch unter Java mit der Java.comm Lib machen.

Gruß
Mag1c
 

Imyourdaddy

Mitglied
Was ist ein serial bridge? Es hängt einfach an meinem PC ohne hub oder bridge...
Also beim Gerät handelt es sich um ein HID-Funk-Gateway für die Heimautomation...
Ginge da das Java.comm Lib auch???
Hast du das schon mal gemacht und hast du zB ein Beispiel zum senden und empfangen???
lg
 

Mag1c

Top Contributor
Hi,

na ich hab z.B. ein Datenkabel für mein Handy. Wird über USB angeschlossen und erscheint dann im OS als serieller Port. Den kann ich dann von Java aus mit dem Java.comm ansprechen. Wie das mit deinem Funk-Gateway aussieht weiß ich nicht. (unter Win wäre ein Hinweis, ob durch das Gerät ein neuer COM-Port erscheint)

Gruß
Mag1c
 

Zubi81

Aktives Mitglied
Imyourdaddy hat gesagt.:
Ginge da das Java.comm Lib auch???

Javacomm von Sun funktioniert effektiv nur mit dem EIA-232 und dem Parallelport.

Michael Stahl hat in seiner Diplomarbeit an der ETH Zürich ein Java USB API für Windows entwickelt. Ich könnte mir vorstellen, dass es bereits eine Abwandlung für Linux gibt. Wieso also nicht gleich alles in Java schreiben? (klar diese Library enthält auch C..)

http://www.steelbrothers.ch/jusb/

Den Code findet ihr auf Sourceforge.

Gruss, Zubi
 

Imyourdaddy

Mitglied
Von diesem jusb weiß ich nur dass es für HID nicht so gut geht, mein Vorgänger der sich mit dem Problem beschäftigt hat, hat aus dem Grund javax.usb verwendet...um mit USB-Geräte zu kommunizieren. Weiß jemand ob das für HID auch verwendbar ist?

Oder doch jusb? Kennt sich da jemand von eeuch damit aus?


Noch mal zurück zu C...Mein C-Programm für das Senden gibt mir am stdout die ganze initialisierung aus...und irgendwo dann die gelesenen Bytes...und dann die deinitialisierung...wie könnte ich jetzt diese Bytes in das Java Programm kriegen?
Kann man diese Bytes irgendwie lokalisieren?
und dann wo abspeichern? Wie würde sowas gehen?
 

Mag1c

Top Contributor
Moin,

also wenn mein Vorschlag mit dem stdin und stdout nicht machbar ist, könntest du einen FIFO im Datei-System nutzen. Der C-Teil schreibt da einfach rein und im Java liest du das aus wie aus einer Datei.

Weitere Möglichkeit: du machst das ganze über JNI. Damit sparst du dir das Starten eines externen Prozesses und kannst die gelesenen Daten direkt an Java durchreichen. (Ja, erfordert natürlich Einarbeitung in JNI, ich habs auch noch nicht gemacht)

Gruß
Mag1c
 

Imyourdaddy

Mitglied
Wie schaut das eigentlich mit Daemons aus... Kann ich für mein C-Programm die Initialisierung in einem Daemon realisieren und dann die eigentliche Aktion als separates Programm einfach laufen lassen?
Wie geht so etwas?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
F javafx.fxml.LoadException: Root hasn't been set. Java Basics - Anfänger-Themen 0
L SHELL-Scripte als root ausführen Java Basics - Anfänger-Themen 5
M JTree ohne root anzeigen Java Basics - Anfänger-Themen 5
T JTree root setzten Java Basics - Anfänger-Themen 13
Horst79 Temp Datei cachen anstatt physikalische Datei im root Verz? Java Basics - Anfänger-Themen 8
T Aus dem package zurück auf die Root Ebene Java Basics - Anfänger-Themen 2
F Root-Pfad der Java-Anwendung herausfinden Java Basics - Anfänger-Themen 1
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
W User zwischen Optionen wählen lassen Java Basics - Anfänger-Themen 1
JD_1998 Vektorrechner; User Input -> Index out of bounds Java Basics - Anfänger-Themen 3
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
B Import Tabelle - Struktur durch User einstellbar Java Basics - Anfänger-Themen 4
C Wie kann ich einen User Input mit einer If-Anweisung verbinden? Java Basics - Anfänger-Themen 5
I gemeinsame Config-Datei für alle Windows-User Java Basics - Anfänger-Themen 5
J Dateien für anderen User "mitgeben" Java Basics - Anfänger-Themen 1
M "Per-User"-Variable Java Basics - Anfänger-Themen 2
P Ein Array mit der Eingaber der User füllen und ausgeben Java Basics - Anfänger-Themen 6
Z User/passwort eingabe...Help! Java Basics - Anfänger-Themen 4
J Array manuell vom User eingeben, Zeilenweise Java Basics - Anfänger-Themen 2
R User Input wird übersprungen?! Java Basics - Anfänger-Themen 17
N User Eingabe mit Zeile aus TextFile vergleichen Java Basics - Anfänger-Themen 13
H Erste Schritte 2 User Interfaces für eine Anwendung Java Basics - Anfänger-Themen 7
S Input/Output Welche Möglichkeiten Eingabe von User abfragen Java Basics - Anfänger-Themen 5
D User - Interface über die Console Java Basics - Anfänger-Themen 14
N User wechseln? Java Basics - Anfänger-Themen 3
3 User erstellen / Oracle Content DB Java Basics - Anfänger-Themen 2
G Startmenü und user.dir Java Basics - Anfänger-Themen 14
P System.getProperty("user.dir") beeinflussen Java Basics - Anfänger-Themen 3
kulturfenster User soll Radius von Kugel bestimmen Java Basics - Anfänger-Themen 4
K User Aktivität überwachen Java Basics - Anfänger-Themen 9
I User anlegen und Sytempfade zuordnen Java Basics - Anfänger-Themen 4
S Windows User != Server User auslesen Java Basics - Anfänger-Themen 19
H Dienst beenden als normaler User Java Basics - Anfänger-Themen 3
X Property user.name über Konsole verändern Java Basics - Anfänger-Themen 6
M JTable Zellen für User sperren Java Basics - Anfänger-Themen 4
S GUI Frame wechseln Java Basics - Anfänger-Themen 15
J Dateiverzeichnis wechseln Java Basics - Anfänger-Themen 4
D Apache POI Tabelle wechseln Java Basics - Anfänger-Themen 2
A GUI Fensterinhalt wechseln Java Basics - Anfänger-Themen 5
C Tabs in JTabbedPane wechseln, wenn Tabs in eigenen Klassen sind Java Basics - Anfänger-Themen 2
A Farben wechseln mit JButton Java Basics - Anfänger-Themen 2
S Erste Schritte Von JFrame in nächstes JFRame wechseln Java Basics - Anfänger-Themen 0
R JLabel imageicon jede Sekunde wechseln Java Basics - Anfänger-Themen 3
N Input/Output mit FileDialog Verzeichnis wechseln Java Basics - Anfänger-Themen 20
M Timer: period während Verlauf wechseln Java Basics - Anfänger-Themen 12
K ActionListener Klasse wechseln Java Basics - Anfänger-Themen 10
G Inhalt einer JComboBox wechseln Java Basics - Anfänger-Themen 5
G Sprache wechseln Java Basics - Anfänger-Themen 3
G Mousefocus wechseln Java Basics - Anfänger-Themen 3
L Threads wechseln Java Basics - Anfänger-Themen 4
G in Verzeichnis auf gleicher Ebene wechseln Java Basics - Anfänger-Themen 4
zilti In Java das Verzeichnis wechseln Java Basics - Anfänger-Themen 21
S Anzuzeigende JPanel's wechseln? Java Basics - Anfänger-Themen 3
S Klassen wechseln Java Basics - Anfänger-Themen 3
S Funktion für Ziffernpositionen wechseln? Java Basics - Anfänger-Themen 2
L Programmsprache wechseln (Labels.): Properties auslesen Java Basics - Anfänger-Themen 2
D Menü soll immer da bleiben - Frames sollen wechseln Java Basics - Anfänger-Themen 3
P Button "Farbe wechseln" Java Basics - Anfänger-Themen 11
D ResourceBundle - zwischen Sprachen wechseln Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben