Can't use moveWindow in Ubuntu 22.04

Problem

I’m using a projector that’s being detected by my laptop that’s running Linux and used as a second monitor to project a pattern onto an object that I want imaged.

I’m wanting to use the moveWindow() function to consistently display the stripe pattern in the same place every time my C++ acquisition program ran.

Steps that I’ve taken

I first ran the C++ program below to see if the window would move around on it’s own, but the OpenCV window was stationary no matter the values I passed into the moveWindow() function.

When I asked my friend to run the same C++ program on his Debian machine he was able to observe the window moving around on it’s own.

For what it’s worth:

  • I’m running the 6.5.0-27 kernel
  • Have Ubuntu 22.04 installed on my machine
  • Using gdm3 as my default display manager
  • I also had to build OpenCV from source; both the buildscript and the cmake output can be found below, to have GStreamer support

The C++ test program


#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */


#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>


int main() {

	srand (time(NULL));
	
	cv::Mat test = cv::Mat::zeros(400,300,CV_8UC3);

	cv::namedWindow("banana");

	int key, x, y;

	while (true) {

		cv::imshow("banana", test);
		key = cv::waitKey(500);

		if (key == 97) {
			break;
		} else if (key != 0) {

			x = rand() % 1000 + 1;
			y = rand() % 1000 + 1;

			cv::moveWindow("banana", x, y);
		}

	}



}

buildScript

#!/bin/bash

sudo apt-get update
sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config \
                        libavcodec-dev libavformat-dev libswscale-dev \
                        libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
                        python3-dev python3-numpy

cd ~
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 4.9.0

mkdir build
cd build

# Configure build with GStreamer support
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_GENERATE_PKGCONFIG=YES \
      -D WITH_GSTREAMER=YES \
      -D WITH_GSTREAMER_0_10=OFF \
      -D WITH_FFMPEG=YES \
      -D WITH_OPENEXR=YES \
      -D BUILD_EXAMPLES=NO \
      -D BUILD_opencv_python2=NO \
      -D BUILD_opencv_python3=YES \
      -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 \
      -D OPENCV_PYTHON3_INSTALL_PATH=/usr/local/lib/python3.7/dist-packages \
      -D OPENCV_ENABLE_NONFREE=YES \
      -D INSTALL_PYTHON_EXAMPLES=NO ..

make -j$(nproc)

sudo make install
sudo ldconfig

Output from Cmake file

-- 
-- General configuration for OpenCV 4.9.0 =====================================
--   Version control:               4.9.0
-- 
--   Platform:
--     Timestamp:                   2024-04-19T16:22:39Z
--     Host:                        Linux 6.5.0-27-generic x86_64
--     CMake:                       3.22.1
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/gmake
--     Configuration:               RELEASE
-- 
--   CPU/HW features:
--     Baseline:                    SSE SSE2 SSE3
--       requested:                 SSE3
--     Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX
--       requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
--       SSE4_1 (18 files):         + SSSE3 SSE4_1
--       SSE4_2 (2 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
--       FP16 (1 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
--       AVX (9 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
--       AVX2 (38 files):           + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
--       AVX512_SKX (8 files):      + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX
-- 
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ standard:                11
--     C++ Compiler:                /usr/bin/c++  (ver 11.4.0)
--     C++ flags (Release):         -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/cc
--     C flags (Release):           -fsigned-char -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a   -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined  
--     Linker flags (Debug):        -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a   -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined  
--     ccache:                      NO
--     Precompiled headers:         NO
--     Extra dependencies:          dl m pthread rt
--     3rdparty dependencies:
-- 
--   OpenCV modules:
--     To be built:                 calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo python3 stitching ts video videoio
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 java python2
--     Applications:                tests perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         YES
-- 
--   GUI:                           GTK3
--     GTK+:                        YES (ver 3.24.33)
--       GThread :                  YES (ver 2.72.4)
--       GtkGlExt:                  NO
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80)
--     WEBP:                        build (ver encoder: 0x020f)
--     PNG:                         /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.37)
--     TIFF:                        /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.3.0)
--     JPEG 2000:                   build (ver 2.5.0)
--     OpenEXR:                     /usr/lib/x86_64-linux-gnu/libImath-2_5.so /usr/lib/x86_64-linux-gnu/libIlmImf-2_5.so /usr/lib/x86_64-linux-gnu/libIex-2_5.so /usr/lib/x86_64-linux-gnu/libHalf-2_5.so /usr/lib/x86_64-linux-gnu/libIlmThread-2_5.so (ver 2_5)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
-- 
--   Video I/O:
--     DC1394:                      YES (2.2.6)
--     FFMPEG:                      YES
--       avcodec:                   YES (58.134.100)
--       avformat:                  YES (58.76.100)
--       avutil:                    YES (56.70.100)
--       swscale:                   YES (5.9.100)
--       avresample:                NO
--     GStreamer:                   YES (1.20.3)
--     v4l/v4l2:                    YES (linux/videodev2.h)
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     Intel IPP:                   2021.10.0 [2021.10.0]
--            at:                   /home/xxx/opencv/build/3rdparty/ippicv/ippicv_lnx/icv
--     Intel IPP IW:                sources (2021.10.0)
--               at:                /home/xxx/opencv/build/3rdparty/ippicv/ippicv_lnx/iw
--     VA:                          NO
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.4.0)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.19.1)
--     Flatbuffers:                 builtin/3rdparty (23.5.9)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/xxx/opencv/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.10.12)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.10.so (ver 3.10.12)
--     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.21.5)
--     install path:                /usr/local/lib/python3.7/dist-packages/cv2/python-3.10
-- 
--   Python (for build):            /usr/bin/python3
-- 
--   Java:                          
--     ant:                         NO
--     Java:                        NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done

maybe your desktop environment messes with things?

The GTK backend code in highgui looks like it supports this function. it eventually calls gtk_window_move().

After using the echo $XDG_CURRENT_DESKTOP command I got ubuntu:GNOME returned

So probably it’s not the desktop environment?

It’s a heavy assumption since I’m still fairly new to Linux and I’m more than welcomed to talk about it further

Nvm, a buddy of mine and originally my machine was using Wayland and we switched over to X11 and have verified that the window did move around with the mentioned C++ test program

1 Like

Feel free to submit an issue about this. This either needs a fix or some really good documentation to excuse this failure to move the window.

Oof… I just re-read my previous response and I meant to say that…

“Nvm, a buddy of mine helped me troubleshoot through the issue and my machine was using `Wayland’ blah blah blah”

But I’ll follow through with submitting an issue ticket and I appreciate your help @crackwitz !