Laufenden Prozess zu screen überführen

Das Kommandzeilentool screen ist praktisch, da Prozesse, welche mittels screen gestartet wurden, auch nach dem Logout weiter laufen. Problematisch ist es, wenn ein Prozess ohne screen gestartet wurde und er nachträglich in screen überführt werden soll. Hierfür wird das Tool reptyr benötigt:

apt install reptyr

Mithilfe von reptyr ist es möglich eine Anwendung an ein neues Terminal zu binden. Um nun einen Prozess zu screen zu überführen, muss erst einmal eine neue screen-Instanz gestartet werden:

screen bash

Sobald die Instanz geöffnet wurde, kann der eigentliche Prozess neu zugewiesen werden:

reptyr PID

PID ist hierbei die Prozess-ID, welche sich mittels des ps-Kommandos ermitteln lässt. Alternativ kann dafür auch top oder htop genutzt werden. Damit wurde die Terminalsitzung und mit ihr der laufende Prozess in die screen-Sitzung überführt.

Passwort eines MariaDB-Nutzers zurücksetzen

Um sich mit einer MariaDB-Datenbank zu verbinden wird ein Nutzer und ein Passwort benötigt. Wenn das Passwort verloren gegangen ist, ist dies allerdings kein Beinbruch, solange es sich um die eigene Installation handelt. In diesem Fall kann das Passwort einfach auf der Konsole zurückgesetzt werden. Dazu muss sich per SSH auf dem entsprechenden Server eingeloggt werden und dort das mysql-Tool mit dem Nutzer root gestartet werden:

mysql -u root

Nachdem dies geschehen ist, wird in der Kommandozeile auf die Tabelle mysql geschwenkt:

use mysql;

In dieser Tabelle finden sich die Verwaltungsdaten des Datenbanksystems. Über diese Tabelle ist es nun möglich den Nutzer mit einem neuen Passwort zu versehen:

update user set password=PASSWORD("geheim123") where User='username';
flush privileges;

Damit ist das Passwort für den entsprechenden Nutzer zurückgesetzt und das mysql-Tool kann mittels:

exit

verlassen werden. Anschließend kann der Nutzer mit dem neuen Passwort genutzt werden.

Terminal-Bibliothek für Java

Für ein kleines Projekt wollte ich eine Visualisierung in der Konsole bzw. im Terminal unter Java realisieren. Das Problem ist das bei der Visualisierung, je nach verwendetem Terminal, bestimmte Operationen nicht verfügbar sind. Dies fängt schon beim Löschen des Bildschirmes an. Je nach Art des Terminals bzw. Betriebssystem kann es hier unterschiedliche Ansätze geben, um dieses Problem zu lösen. Abhilfe bei diesen Problemen schafft die Bibliothek Lanterna.

Lanterna in Aktion

Laterna liefert die Möglichkeit Text-Schnittstellen und GUIs zu bauen, unabhängig vom verwendeten Terminal. Damit ähnelt sie der C-Bibliothek ncurses. Die Bibliothek ist in der Lage festzustellen, auf welcher Art Terminal sie läuft und kann somit die Ausgabe entsprechend anpassen. So werden z.B. Unix-Steuercodes genutzt, wenn das Terminal diese unterstützt. Nach der Einbindung per Maven:

<dependency>
    <groupId>com.googlecode.lanterna</groupId>
    <artifactId>lanterna</artifactId>
    <version>3.0.1</version>
</dependency>

kann die Nutzung der Bibliothek beginnen. Im ersten Schritt sollte eine Instanz der Klasse Terminal angelegt werden:

Terminal terminal = new DefaultTerminalFactory().createTerminal();

Dies übernimmt die DefaultTerminalFactory. Sie sorgt dafür, dass das passende Terminal ausgewählt wird. Nun können Zeichen auf das Terminal geschrieben werden:

terminal.clearScreen();
terminal.putCharacter('a');

Hier wird das Terminal erst bereinigt und anschließend das Zeichen a auf das Terminal geschrieben. Neben der direkten Arbeit mit dem Terminal, liefert Lanterna eine Abstraktionsschicht namens Screen mit, mit welcher das Terminal wie ein pixelbasiertes Gerät angesprochen werden kann. Neben der Ausgabe beherrscht die Bibliothek die Eingabe. Mittels:

KeyStroke keyStroke = terminal.pollInput();

wird die aktuelle gedrückte Taste abgefragt. Diese Methode arbeitet nicht-blockierend. Für den Fall das eine blockierende Methode benötigt wird, eignet sich die Methode:

KeyStroke keyStroke = terminal.readInput();

Damit lassen sich mithilfe der Bibliothek komplexe Anwendungen auf dem Terminal umsetzen. Wenn die Anwendung beendet werden soll, muss das Terminal mittels:

terminal.close();

geschlossen werden. Der Quelltext der Bibliothek ist auf GitHub zu finden. Er ist unter der LGPL lizenziert und damit freie Software.

Sprache unter macOS ändern

macOS unterstützt unterschiedlichste Sprachen, wie z.B. Deutsch, Englisch und Französisch, für die Anzeige. Unter Umständen kann es vorkommen, das die Sprache verstellt wurde und sie wieder auf den ursprünglichen Wert zurückgestellt werden soll.

Im Terminal kann die neue Sprache eingestellt werden

Mittels des Terminals und des Befehls:

sudo languagesetup

kann die Sprache umgestellt werden. Nach dem Aufruf des Befehls wird ein Menü angezeigt, in dem die zu verwendende Sprache definiert werden kann. Anschließend sollte das System mittels:

sudo reboot

neugestartet werden. Das System nutzt nach dem Neustart die ausgewählte Sprache.