DosEmu auf einem LTSP-Client als lokale Applikation#

Da ich auf meinen LTSP-Rechnern (LinuxTerminalServer) ein DOS-Programm benötigte, musste ich auch diese letzte Hürde für die Linux-Migration unseres Firmen-Netzwerks nehmen. Das Problem ist nun, daß DosEmu die gesamte Rechenzeit des Rechners an sich reisst (Multitasking war seinerzeit noch nicht so verbreitet). Also ist es trotz der Vorteile des LTSP-Systems besser, diese spezielle Applikation auf dem Client laufen zu lassen.

Grundsätzlich gibt es zwei Möglichkeiten, das Problem anzugehen. Man kann bei LTSP beim Booten auf jeder virtuellen Konsole ein bestimmtes Programm starten. So könnte man den Dosemu auf einer eigenen Konsole laufen lassen. Grundsätzlich wäre es auch möglich, einen lokalen X-Server nur für lokale Applikationen zu starten.

Am schönsten ist es jedoch wohl, die lokale Applikation auf dem normalen (also dem entfernten) X-Desktop anzuzeigen. Aus LTSP-Sicht handelt es sich um local Applications. Da der Desktop, den man benutzt, jedoch nicht auf dem Client, sondern auf dem LTSP-Server läuft, muss man also ein Programm auf einem fremden Rechner (nämlich dem Client) starten.

lokale Applikationen ohne Benutzerverwaltung#

Hierzu benötigt man einen ssh-Server auf dem Client. Der wird durch eine Einstellung in der lts.conf gestartet. Man muss noch Server-Keys generieren wie in der Doku beschrieben.

Nun ist in der Doku allerdings noch einiges beschrieben, damit die Applikation auch unter dem richtigen Benutzer läuft und auf das richtige Homeverzeichnis zugreift. Hierzu muss u.a. NIS und NFS eingerichtet werden. Allerdings kann man sich das für Dosemu sparen. Dieses muss sowieso mit root-Rechten laufen. Meine Applikation greift nicht schreibend auf das Homeverzeichnis zu, damit ist auch die Benutzerverwaltung unnötig.

Ich habe mich normal als User eingeloggt und ssh-keygen benutzt, um meinem normalen Benutzer eine Schlüsseldatei zu erzeugen. Den privaten Schlüssel habe ich dann nach /opt/ltsp-4.2/i386/root/.ssh/authorized_keys kopiert. Ich musste noch mit

  chmod 755 /opt/ltsp-4.2/i386/root
dafür sorgen, daß der sshd keine Mucken mehr macht. Nach dem nächsten reboot des Clients läuft der sshd und man kann sich als Benutzer passwortlos auf dem Client als root einloggen.

Dosemu-Paket erstellen#

Nun geht es daran, eine fremde Applikation (also dosemu) in das LTSP-System zu installieren. Da alle Linux-Systeme gleich sind, habe ich mir zuerst gedacht, ich gehe von der Debian-Installation aus. Ich habe mit

  aptitude download dosemu
das *.deb-Paket heruntergeladen und dieses dann mit
  mkdir dosemu
  dpkg -x dosemu_1.2.1-3_i386.deb dosemu
ausgepackt. Dann habe ich aus dem dosemu-Verzeichnis alles gelöscht, was ich nicht für essentiell wichtig hielt (Dokumentationen, freedos-Klamotten, Versionen für Ausgabe auf den X-Server, die ich nicht zu benutzen gedenke, etc.). Dann habe ich mit
  ldd usr/bin/dosemu.bin
nachgesehen, welche Bibliotheken das Programm benutzt. Die Bibliotheken, die ich nicht im LTSP-root-Baum finden konnte, habe ich ebenfalls in das dosemu-Verzeichnis kopiert. Dieses ganze Verzeichnis habe ich in ein Archiv gepackt (man weiss ja nie, wann man's mal wieder braucht)
  cd dosemu
  tar czf ../ltsp-dosemu.tgz *
und dann dieses Archiv in den LTSP-root-Baum ausgepackt.

Dann habe ich meine Dosemu DOS-Installation in das Home-Verzeichnis von root für den Client kopiert. Wie ich diese Installation aufgesetzt habe, soll hier nicht Thema sein. Das ist eher ein Thema für die DosEmu-Seite.

Konsole einrichten#

Ich muss nun noch dafür sorgen, daß ich ein Icon habe, mit dem ich eine Konsole starte, diese auf die richtige Schriftgröße und Terminalgröße setze und dann per ssh den dosemu und evtl. sogar verschiedene DOS-Programme starten kann.

Die KDE-Konsole ist, was die programmgesteuerte Konfiguration anbetrifft, ein sehr seltsames Programm. Dennoch habe ich mein Problem letztlich lösen können. Zuerst habe ich die Schriftart auf "sehr gross" gestellt (Damit ein 80x25-DOS-Fenster auch den 1024x768er Bildschirm füllt), das Fenster auf eine nicht-Vollbild-Größe verkleinert und dies dann als Standard-Einstellung gespeichert. Alle übrigen Einstellungen gebe ich lieber auf der Kommandozeile an:

  konsole --nomenubar --notoolbar -TDOS-Fenster --noscrollbar --vt_sz 80x25 --icon etc/bayen/dosicon.xpm -e ssh root@${DISPLAY/:*/} -t dosemu -input "programm\\\\r"
Ganz hinten ersetze ich programm durch den Namen meiner DOS-Applikation. Mein Programm läuft nun innerhalb der Konsole aber ohne die ganzen Konsole-Menüs drumherum. Wahrscheinlich geht das mit xterm oder sowas noch einfacher, aber jetzt läufts und ich habe im Moment keine Not mehr, hier noch weiterzuforschen. (Natürlich habe ich meine Konsole-Grundeinstellungen verstellt - wenn mich das in Zukunft stört, kann ich ja wieder in die Forschung einsteigen.)

Diesen obigen Befehl baut man nun in ein Icon ein. Ich habe dazu einen Programmknopf von Konsole neu erstellt und als Befehl die obige Zeile eingegeben. Als Icon habe ich einen Screenshot meiner DOS-Applikation als XPM abgespeichert und dem Button zugeordnet (Das in der Befehlszeile angegebene Icon wird dann nach dem Start für das Fenster verwendet, sie sind bei mir identisch). Fertig!

Drucken vom Client aus#

Wenn man mit lokalen Applikationen drucken will, gibt es verschiedene Möglichkeiten. Man kann z.B. ganz schnell lp durch ssh user@ltspserver lp ersetzen, hat dann aber wieder die Authentifizierung am Hals bzw. muss seinen Useraccount für alle Clients (und damit letztlich alle anderen Benutzer) öffnen. Am elegantesten wäre es, einen normalen CUPS-Client zu installieren. Auch hier habe ich wieder folgende Vorgehensweise angewandt. Die benötigten Abhängigkeiten habe ich dabei nach "try and error" herausgefunden, wobei es natürlich auch möglich ist, alle im Debian-Paket angegebenen Abhängigkeiten zu installieren. Deren Liste muss man dann allerdings von Hand aus den Paketbeschreibungen heraussuchen.

  aptitude download cupsys-bsd cupsys-client libcupsys2-gnutls10
libgnutls11 libtasn1-2 libcrypt11 libgpg-error0
  mkdir cupsys-client
  dpkg -x cupsys-client_1.1.23-10sarge1_i386.deb cupsys-client
  dpkg -x libcupsys2-gnutls10_1.1.23-10sarge1_i386.deb
cupsys-client
  ...
  cd cupsys-client
  rm -r usr/share
  tar czf ../ltsp-cupsys-client.tgz *
Das erzeugte Paket entpackt man dann in das root-Verzeichnis der LTSP-Installation. Der Umweg über das tgz-Paket erspart einem, die ganze Sache beim nächsten LTSP-Update ganz von vorne machen zu müssen.
  cd /opt/ltsp-4.2/i386
  tar xzf ~/ltsp-cupsys-client.tgz
  echo "ServerName printserver" >>etc/cups/client.conf
(Statt printserver sollte der Name des CUPS-Servers, also i.A. der des LTSP-Servers eingetragen werden.) Nun muss noch ein Spool-Verzeichnis beim Hochfahren des Clients angelegt werden:
  echo "mkdir -p /var/spool/cups/tmp" >>etc/rc.sysinit.rc
Jetzt kann man auf dem Client ganz normal drucken. Um also den Dosemu zum Drucken zu bekommen, schreibt man in /opt/ltsp-4.2/i386/dosemu/dosemu.conf oder in die /opt/ltsp-4.2/i386/root/.dosemurc folgendes:
  $_printer = "Drucker1 Drucker2"
Nun hat man im Beispiel LPT1 und LPT2 im Dosemu und kann munter losdrucken.

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-2) was last changed on 16-Oct-2006 14:19 by ThomasBayen