Impress Show Runner Trivial on Linux

Update 11 April 2020: Using the xdotool method, the QtShowRunner works well on Linux, so there is a portable version for Windows and Linux. Get the latest at the github repo. I’m still investigating “Deployment” for Windows and Linux. Now, previously…

I have beat my head against the wall trying to fix the QtShowRunner program that works on Windows to work on Linux. None of the methods have worked.

  • Kernel uinput API calls never worked.
  • Using the X11 XSendEvent to send either Mouse clicks or Key events didn’t work.

Finally I found a command called xdotool which does many X things including sending mouse clicks and key presses. Here’s a shell script that uses the xdotool to launch soffice impress to show a slideshow and then terminates the show and then exits the script.

Screenshot from 2020-04-09 20-11-31.png

The script launches the show with the ending & to detach it. Then loops looking for the process using pgrep and if it’s still around, uses xdotool to click the mouse and waits forĀ  5 seconds. When the process finishes the show, and the click ends the show, then pgrep fails and the script exits. Trivial.

Continue reading “Impress Show Runner Trivial on Linux”

QtShowRunner Runs Shows in Impress

You recall my previous post about using LibreOffice Impress to show artwork?

Well that’s a problem if you have lots of artwork you want to show. The slide shows get very large and so you have a few shows, and then you want to loop them all, right? Impress does not support that. So I wrote a program to help.

SlideShows.png
Lots of Artwork Slide Shows

RunningMan.pngQtShowRunner runs a sequence of LibreOffice Impress slide shows one after the other in a loop. Currently it runs on Windows but soon the plan is to move it to Linux Mint.

See my original question about this problem here:

Chaining Impress Slide Shows Together?

After no solution appeared, I wrote a program to do it.

Here is a shot of the program dialog and the Impress Slide Show settings. You need to uncheck Change Slides by Clicking on background for QtShowRunner to work without skipping through your slides.

Here is the SourceForge page for the program.

Continue reading “QtShowRunner Runs Shows in Impress”

Qt Static Build Confusion

Backdated by a year to get it off the front page.

I’m building an App on Windows and Linux. I was able to make a zip file containing the app and DLLs for a simple deploy onĀ  Windows. Now I’d like to link the app statically for a simple deploy on Linux.

Starting here: https://doc.qt.io/qt-5/linux-deployment.html

I’m confused first of all by this procedure:

Qt for Linux X11 BuildQtStatic.png

Searching for .configure found it here:

QtBuildStatic_WeThinkTop

And this I did this:

QtBuildStatic_WeThinkCropped

But when this finishes, I can’t find the prefix I chose anywhere. I presumed from the web page that it was going to make another tree with a static version of Qt in it, but I can’t find it anywhere.

  1. So what happened?
  2. What did I do wrong?
  3. And when I do it right, how do I use it to build the static app.

The web page is not clear on that. I can’t find a way to “Configure” my app in QtCreator to use another build method, or do I do it manually. They seem to use some example app, but that dir path does not match anything that I have for my app. Here is my app tree.

QtCodeDir.png

Anybody help me build this app statically for easy deployment on Linux?

Thanks
:ww

Update: I guess I forgot to do a “make”. But when I did that ran for over 2 hours and I still can’t find what it produced or figure out how to use it. I’m giving up on “Linux Static Deployment”. It is apparently only designed for folks with more energy than I have.

Irfanview Capture Bad Cursor

Backdated by a year to keep it off the front page.

Looks like a bug in Irfanview Capture for Windows 10 Home 1903.

Left is what Irfanview got. The Right is what my phone shows. Looks like Irfanview doesn’t get the size or position of the Pointer.

Windows has a maybe new feature to increase the size of the pointer larger.

Here’s the Irfanview I’m using. Latest as of a few minutes ago.

IrfanviewCaptureOptions

GitKraken shows black menus

Summary: GitKraken on Linux VirtualBox VM shows blank menus

On Linux Mint 19.3 on VirtualBox 6.0.18 VM on WIndows 10 host, GitKraken sometimes shows black menus.

Steps to Reproduce:

  1. Install GitKraken on Linux Mint Guest using VirtualBox 6.0.18 on Windows 10 1903 host.
  2. Ā Observe most of the time the menus work but sometimes they show black rather than their white contents.

Expected behavior: [What you expect to happen]

Menus should work

Actual behavior: [What actually happens]

Menus are black sometimes when you need them the most. Do I have mind reader feature enabled?

Just kidding. Something is wrong.
Sure would be nice to give you a screenshot. Oh wait. I can that’s why I did this post. One sec.

Oh Wait

It’s even worse than I thought. If you left click on the file name on the right list that you tried to edit, then a white box pops up with [Save, Don’t Save, Cancel] options and your Linux VM is now locked and requires a RESET to reboot and get going again. Not just GitKraken is hung. The entire VM is stuck.

GitKrakenOnLinuxVM_MenuLocksSystemAfterFileEdit

Now VM Is Hung

So the machine must be RESET at this point by using the MACHINE >> RESET option at the top of the screen on the left. Hummm Something is broken. This is easily reproducible. Just click on any modified file on the right, choose edit file and then try to figure a way to save it and when you see that box, you are hosed.

  • Windows 10 1903 host
  • VirtualBox 6.0.18
  • Linux Mint 19.3 guest

Hummm.

 

Git Confusion After a Pull

Backdated by one year to get it off the front page. Don’t know another way. Sorry.

I’m not a noob. Retired Software Engineer. Been programming since about 1968 and first used SCCS for source control. Used too many source control systems over the years to count. But I’m new to git. Only used it once before couple of years ago.

I doing a Qt project after some time off since my other projects, and found GitKraken and of course GitHub.

So this project involves 4 computers for development and debug.

  1. Win1 – Windows 10 primary development.
  2. LinVM – Linux Mint VirtualBox VM hosted on Win1.
  3. Lin1 – Mini Asrock PC running Linux Mint.
  4. Win2 – Mini GigaByte Brix running Windows 10.

Installed Qt and GitKraken on all these systems. Developed the code and committed and pushed changes from all four systems. Hey I assumed it could handle changes from everywhere, what do I know? Pulled stuff down to start work on a system for dev or test each time.

Used the same profile when setting up GitKraken on all the systems. Maybe this was an issue. Tell me if so. What do I know?

Ok enough jawboning. Here’s the issue: On Win2, after the last pull, GitKraken now shows me this:

GitKrakenModifiedFiles
After last pull on Win2

Normally I would expect this. As I understand it, each system is keeping a “Local git Repo” and when you do a pull, of course it should show local files are different from the local repository. The thing is, I expected the interface to show me a way to do a stage and commit to clear these. In other words

“Hey, git, accept this pull and put it in your local repository!”

But I don’t see anyway to do that. If I click on those files no “staging” or anything like it shows up.

So if I were not such a fool and was using the command line interface, what would I do? Or would git command line have fixed this up automagically, because it knew that all successful pulls should be “commited” to the local repo?

Is this a GitKraken bug? Or expected behavour? And how do I fix it and move on?

Thanks a ton.

Here’s the whole picture displayed by GitKraken. Click for a larger view.

GitKrakenAfterLastPull
GitKraken after last pull on Win2

 

Git and GitKraken seem great. Don’t want to go back to SCCS, but I’m confused.

Thanks for your help.
:ww

Update:

After Editing .gitignore and pushing that to GitHub, the condition cleared itself. Now the file shown on the right list is just .gitignore. Not clear if this is a subtlety with git or an issue with GitKraken.

X11 XSendEvent does not click mouse

Post backdated by a year to keep it off the front page. Don’t know of any other way.

Updates: See End of Post

Building a Qt application that spawns another app and then clicks on it – the top window I think. Got it working on Windows with SendInput.

Now for the same idea on Linux. I’m trying to use X11. Found lots of examples using XQueryPointer and XSendEvent. Odd loop looking through windows and subwindows I have no clue about. Anyway, it doesn’t work and I have no idea which window the code is trying to target. Nobody talks about that in the examples.

Code runs, checks for errors and finds none. But clicks do not work. My click on mouse works instantly.

How do I figure out where clicks are going? And how do I find the top window or whatever I need to send clicks there?

Here’s the debug output of the app:

Screenshot from 2020-04-09 12-27-58.png

Here are the routines called by the Qt application from TimerEvents inside the QtWidget application. Here is the code over on GitHub.

X11MouseClick Source On GitHub

Let’s try it as a Gist. Whooo hoooo…..

//
// Let's try the more straightforward X11 API to click the mouse
// This example code was harvested from the internet
//
// https://www.linuxquestions.org/questions/programming-9/simulating-a-mouse-click-594576/
//
// Another link is here
// https://stackoverflow.com/questions/27984220/x11-sending-a-mouse-click-without-moving-a-pointer
#include <QMainWindow>
#include <QDebug>
#include <QString>
#include <mouseclick.h>
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
// open and close do nothing.
// we are going to open the display each time we click.
bool mouseopen()
{
return true;
}
bool mouseclose()
{
return true;
}
bool mouseclick()
{
int button = Button1; // just click button one. I'm sure it will be fine.
Display *display = XOpenDisplay(NULL);
XEvent event;
if(display == NULL)
{
qDebug() << QString("XOpenDisplay returned NULL");
return false;
//fprintf(stderr, "Errore nell'apertura del Display !!!\n");
//exit(EXIT_FAILURE);
}
memset(&event, 0x00, sizeof(event));
event.type = ButtonPress;
event.xbutton.button = button;
event.xbutton.same_screen = True;
XQueryPointer(display, RootWindow(display, DefaultScreen(display)),
&event.xbutton.root, &event.xbutton.window,
&event.xbutton.x_root, &event.xbutton.y_root,
&event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
event.xbutton.subwindow = event.xbutton.window;
qDebug() << "Mouse Window " << event.xbutton.window;
#if 1 // don't look for a subwindow. Just use display. Is this Root?
while(event.xbutton.subwindow)
{
event.xbutton.window = event.xbutton.subwindow;
XQueryPointer(display, event.xbutton.window, &event.xbutton.root,
&event.xbutton.subwindow, &event.xbutton.x_root,
&event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
}
#endif
qDebug() << "Mouse Subwindow" << event.xbutton.window;
if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0)
{
qDebug() << QString("XSendEvent error XS1");
//fprintf(stderr, "Errore nell'invio dell'evento !!!\n");
}
else
{
qDebug() << "Button Press";
}
XFlush(display);
usleep(100000);
event.type = ButtonRelease;
event.xbutton.state = 0x100;
if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0)
{
qDebug() << QString("XSendEvent error XS2");
//fprintf(stderr, "Errore nell'invio dell'evento !!!\n");
}
else
{
qDebug() << "Button Release";
}
XFlush(display);
XCloseDisplay(display);
return true;
}

Super that works too. Who knew.

Ok, so how do I figure out what’s wrong here so my code can click’ity click click on other applications?

Thanks.

Update:

Tried Keypress events rather than mouse clicks and used XGetInputFocus to find the window. No success. Here is the github page for latest code:

GitHub page for X11MouseClick.cpp

Thanks.

Qt Linking with X11?

Dated a year ago to get it off the front page.

Qt Application on Linux Mint trying to link with X11 libraries. Original errors are:

Screenshot from 2020-04-09 10-15-35.png

So it looks like it can’t find XFlush. Maybe can’t find libX11.so. Added this to the project file:

Screenshot from 2020-04-09 10-17-22.png

But still got this error:

Screenshot from 2020-04-09 10-16-33.png

But libX11.so is clearly present on system:

Screenshot from 2020-04-09 10-21-19.png

So how do I tell Qt to find libX11.so and link with it?

Thanks.

Steam – Pay $5 First Apparently

So, as you know if you watch things here, I’m a big MMO fan, and recently it’s Final Fantasy XIV. I just remembered that I had purchased a BluRay a while ago of Kingsglaive: Final Fantasy XV, and wondered if I could play that. Not an MMO, but just a single player RPG. So I looked it up.

I tried to install the demo. Figured I’d check it out. I had three choices to get it:

  • Steam
  • Microsoft Store
  • Origins [whatever that is, but the site looks like a steam wanabee.]

First I tried the Microsoft Store. – FAIL. I tried to sign in with my Microsoft account to do that, but I got dumped to a page that said it failed. No real help there.

Try steam. No problem, at first. Program downloaded and installed. Then hung after a few clicks to set it up.

Crys_00402.png

Just hung there forever like it was trying to reach some website. Although why would it by saving stuff online? It’s a single player RPG.

Continue reading “Steam – Pay $5 First Apparently”