Last Updated or created 2023-02-07
I’m using a windows program for typesetting bagpipe music.
Luckily this runs on Linux using wine.
Sometimes i just want a PDF version of a tune, for example for my tunebook compiler. (Other post)
Or i want to batch convert a lot of bww files.
A long time ago i used a virtual machine with automation software for this.
Why not automate the process on my Laptop?
So i made this script, with a workaround for the xdotool wine problem.
(wine window needs to be active to accept key strokes, other linux xwindows you can use the ID of the window)
#!/bin/bash # use c for close at the end, without c bgplayer wont be shut down # bww2pdf path/to/music.bww c # make tmp file cat "$1" > /tmp/deze.bww # start bgplayer if not started .. if not started wait 3 secs slp=0 pgrep BGPlayer.exe >/dev/null || slp=3 pgrep BGPlayer.exe >/dev/null|| ( nohup wine ~/.wine/dosdevices/c\:/Program\ Files\ \(x86\)/Bagpipe\ Player/BGPlayer.exe & ) sleep $slp # get program id pid=$(pgrep BGPlayer.exe) # get xwindow id using pid winid=$(xdotool search --limit 1 --all --pid $pid) # activate window xdotool search --desktop 0 --class "BGPlayer.exe" windowactivate # open file menu and Open file xdotool key --window $winid "alt+f" xdotool key --window $winid "o" # give program time to execute sleep 1 # open our tmp file xdotool type '\tmp\deze.bww' xdotool key KP_Enter sleep 2 # open file menu select Print and PDF as output xdotool key "alt+f" xdotool key "p" xdotool key "P" sleep 2 # execute xdotool key KP_Enter sleep 1 # File close xdotool key "alt+f" xdotool key "c" sleep 2 # close program when c was added to commandline mv ~/PDF/deze* "$1.pdf" if [ "$2" == "c" ] ; then xdotool key "alt+f" xdotool key "x" fi