qemu: Drucken aus Gastsystem MS-DOS an echte Parallelschnittstelle des Linuxsystems

  • Aufruf z.B. mit "qemu-system-x86_64 Parameterliste" (siehe unten) ...


    Nach monatelangen Versuchen habe ich insbesondere festgestellt, daß weder mit "-parallel /dev/parport0" noch mit
    "-chardev parallel,id=test,path=/dev/parport0 -parallel chardev:test" innerhalb der Parameterliste ein Paralleldrucker
    des Linux-Hostsystems zufriedenstellend angesprochen werden kann!


    Der Trick besteht darin. ein Characterdevice vom Typ "file" zu definieren, dem ich den Namen "Druckerschnittstelle"
    gegeben habe und das mit der ersten parallelen Druckerschnittstelle(ndatei) "lp0" im Verzeichnis /dev/ verbunden ist.
    Der Parameter "-parallel" leitet alles, was an die virtuelle Schnittstelle LPT1 des Gastsystems DOS geschickt wird an
    das definierte Charakterdevice des Hostsystems Linux weiter, Linux druckt also brav alles, was in /dev/lp0 ankommt!


    In meinem speziellen Fall (OpenSuse 15.1) rufe ich wie folgt auf, wobei der erste Teil, in dem insbesondere die Variablen
    $C (Partition C:) sowie $D (Partition D:) definiert werden, weggelassen ist:


    if grep -q parport0 /proc/ioports; then # physikalische Parallelschnittstelle vorhanden?
    DrPm1="-chardev file,id=Druckerschnittstelle,path=/dev/lp0"; DrPm2="chardev:Druckerschnittstelle"
    else
    DrPm2="none"
    fi
    if [ "$C" ]; then driveC="-drive file=/dev/sd$C,if=ide,format=raw,cache=writeback"; fi # existiert immer!
    if [ "$D" ]; then driveD="-drive file=/dev/sd$D,if=ide,format=raw,cache=writeback"; fi # existiert manchmal!
    qemu-system-x86_64 \
    -display gtk,zoom-to-fit=on -enable-kvm -m 256 $DrPm1 -parallel $DrPm2 -rtc base=localtime,driftfix=slew \
    -drive file=/home/lutz/diesUdas/hardUsoftware/DosBootFloppies/qemu.img,if=floppy,format=raw -boot a $driveC $driveD


    Die beschriebene Lösung ist aber problemlos auch auf echte USB-Drucker übertragbar, d.h. mit entsprechend veränderten
    Parametern, müßte man also auch von virtuell LPT1 auf echt-USB im Hostsystem drucken können! Ich denke, das
    müßte (ungeprüft!) z.B. so aussehen:


    ... -usb -device usb-host,vendorid=0x0482,productid=0x065c -chardev file,id=test,path=/dev/usb/lp0 -parallel chardev:test ...


    Bei Fragen: RLad(at)dueren.net

    Für den Inhalt des Beitrages 137667 haftet ausdrücklich der jeweilige Autor: hinz