-
-
Save SergKolo/328548cc3c2b4597d7f7ab91db26709d to your computer and use it in GitHub Desktop.
| #!/usr/bin/env python3 | |
| # Author: Serg Kolo | |
| # Date: Oct 3rd, 2016 | |
| # Description: Script for aligning the center of | |
| # user's active window with the center of the monitor | |
| # Tested on: Ubuntu 16.04 | |
| # Written for: http://askubuntu.com/q/832720/295286 | |
| from __future__ import print_function | |
| import gi | |
| gi.require_version('Gdk','3.0') | |
| from gi.repository import Gdk | |
| import subprocess | |
| def get_offset(*args): | |
| command = ['xprop','-notype','_NET_FRAME_EXTENTS', | |
| '-id',str(args[0]) | |
| ] | |
| out = subprocess.check_output(command) | |
| if 'not found' in out.decode(): | |
| return 0 | |
| return int(out.decode().strip().split(',')[-2]) | |
| def main(): | |
| screen = Gdk.Screen.get_default() | |
| window = screen.get_active_window() | |
| window.unmaximize() | |
| window_width = window.get_width() | |
| window_y = window.get_origin()[-1] | |
| print(window_y) | |
| window_monitor = screen.get_monitor_at_window(window) | |
| mon_g = screen.get_monitor_geometry(window_monitor) | |
| print(mon_g.width,mon_g.height) | |
| monitor_center = screen.get_monitor_geometry(window_monitor).width/2 | |
| # if centers of window and screen are aligned | |
| # the top left corner will be at screen_center - window_width/2 | |
| new_position = monitor_center - window_width /2 | |
| # For some reason there is vertical offset necessary | |
| # Apparently this comes form _NET_FRAME_EXTENTS value | |
| offset = get_offset(int(window.get_xid())) | |
| window.move(new_position,window_y-offset) | |
| print(window.get_origin()) | |
| if __name__ == '__main__': | |
| main() |
Hi @SergKolo. I am Ubuntu 18.04 with GNOME 3.28.2. I am mostly using the default settings. To be honest, I have not used linux systems for quite a while, so if there are any other relevant settings, please let me know.
Thanks for the script. It works fine under Ubuntu 20.04 apart from the height isn't maintained. For example if I align a window to one side of the screen and then the height is 100%. When centering the window then the height becomes smaller.
Thank you for this script! Working on Manjaro.
@orlandini works well on dual monitors here inside ubuntu 20.04. Thanks! the original script will always center on the 'primary' monitor instead of my 'active'(i.e. the monitor I current am using) monitor.
I want to thank both of you who created/contributed to this script. The original works for one monitor, and the modified version for however many. Good find. Thank you both.
@orlandini Thank you for contributing what worked for your setup. Just a question, what desktop environment do you use and do you use any docks/panels ?