Ich suche mir jetzt schon eine Wolf und bin knapp davor aufzugeben.
Ich werkel ja immer wieder an meiner "eigenwilligen" eigenen Linuxversion und da immer auch zweigleisig: Eine "normale " mit Desktop (XFCE) und eine reine Textmode Konsolenvariante ohne Desktop und ohne "X".
Hier ist jetzt auch mein Problem: Ich würde gerne auf der Textmodekonsole den Zeichensatz ändern und als ewig gestriger möchte ich dort kein UTF-8 verwenden, sondern (wie vor 35 Jahren) einen erweiterten deutschen Ascii-Zeichensatz.
Auf der Konsole kann ich "unicode_stop / unicode_start / setfont fontdatei" eingeben und das funktioniert auch. Damit das ganze auch für den User funktioniert habe ich die 3 Programme nun in das Verzeichnis meines Projektes gelegt, umbenannt und mit User-Rechten versehen. Auch mit umbenannten Namen funktioniert das ganze, wenn ich die Programme von Hand in der Konsole aufrufe. Versuch ich in C nun die Programme zu starten, funktioniert nur ein "system("unicode_start"); system("unicode_stop)" aber ein "errcode= system("setfont Dateiname");" funktioniert nicht, es bringt mir nur den Fehlercode 32512 !
Woran liegt das und gibt es einen - einfachen - Weg, aus einem C-Programm den Zeichensatz zu ändern ?
system("unicode_stop)" aber ein "errcode= system("setfont Dateiname");"
funktioniert nicht, es bringt mir nur den Fehlercode 32512 !
Das funktioniert anscheinend schon, aber es liefert einen Fehler zurück. Vielleicht mal in errno und die Manpage system(3) schauen?
Woran liegt das und gibt es einen - einfachen - Weg, aus einem
C-Programm den Zeichensatz zu ändern ?
Das, was system(3) auch macht, also fork(2), execl(3) und waitpid(2), das steht in der Manpage und ausformuliert natürlich im Code. Linux ist Open Source, die GLibc auch. Was hindert Dich, in die Sourcen zu schauen?
"errcode= system("setfont Dateiname");"
funktioniert nicht, es bringt mir nur den Fehlercode 32512 !
Tipp: Den Returncode vom Aufruf kriegst du per WEXITSTATUS(errcode);
in deinem Fall ist das 127
"system()" benutzt "/bin/sh", dort findet sich:
Value 127 is returned by /bin/sh when the given command is not found within your PATH system variable and it is not a built-in shell command.
Also: PATH-Variable prüfen, oder direkt "/usr/bin/setfont" aufrufen.
Das, was system(3) auch macht, also fork(2), execl(3) und waitpid(2),
das steht in der Manpage und ausformuliert natürlich im Code. Linux ist
Open Source, die GLibc auch. Was hindert Dich, in die Sourcen zu
schauen?
... das werde ich wohl tun, ist aber genau das, was ich vermeiden wollte !
Das, was system(3) auch macht, also fork(2), execl(3) und waitpid(2),
das steht in der Manpage und ausformuliert natürlich im Code. Linux ist
Open Source, die GLibc auch. Was hindert Dich, in die Sourcen zu
schauen?
... das werde ich wohl tun, ist aber genau das, was ich vermeiden wollte
Warum?
!
Bitte nicht plenken, damit sowas nicht passiert.
Εrnst B. schrieb:
Also: PATH-Variable prüfen, oder direkt "/usr/bin/setfont" aufrufen.
Das habe ich natürlich direkt getan, auch setfont ins aktuelle
Verzeichnis kopiert und umbenannt.
Hast du dabei bedacht, dass das aktuelle Verzeichnis normalerweise nicht im PATH ist und daher dort nicht gesucht wird?
Hast du dabei bedacht, dass das aktuelle Verzeichnis normalerweise nicht
im PATH ist und daher dort nicht gesucht wird?
Hab ich natürlich bedacht und wie oben geschrieben dass Programm setfont aus /usr/bin in das Projektverzeichnis kopiert, umbenannt und umbenannt aufgerufen. Dasselbe habe ich gemacht mit den Schriftarten, die ich gerne gesetzt haben möchte (aus Verzeichnis /usr/share/kbd/consolefonts)
Das, was system(3) auch macht, also fork(2), execl(3) und waitpid(2),
das steht in der Manpage und ausformuliert natürlich im Code. Linux ist
Open Source, die GLibc auch. Was hindert Dich, in die Sourcen zu
schauen?
... das werde ich wohl tun, ist aber genau das, was ich vermeiden wollte
Warum?
In den Code schauen zu müssen ist ein Zeichen dass die Doku versagt hat.
Für mich wäre Sourcecode von Systemprogrammen auch nicht die erste Anlaufstelle wenn ich Fragen zur API hätte.
enthält die Funktionen, die setfont verwendet. Ist leider im default statisch gelinkt und wird nicht mitinstalliert?
==> configure mit --enable-libkfont
Dann kannst du das dazulinken und direkt kfont_init & kfont_load_fonts aufrufen.
enthält die Funktionen, die setfont verwendet. Ist leider im default
statisch gelinkt und wird nicht mitinstalliert?
==> configure mit --enable-libkfont
Dann kannst du das dazulinken und direkt kfont_init & kfont_load_fonts
aufrufen.
In den Code schauen zu müssen ist ein Zeichen dass die Doku versagt hat.
Wie in Beitrag "Re: Linux: setfont aus C-Programm aufrufen" schon geschrieben wurde, steht es in der Doku sehr wohl auch drin. Da ist sogar der genaue Aufruf von execl() enthalten. Dass man zusätzlich auch noch in den Quellcode schauen kann, ist ein Vorteil, kein Nachteil.