Ubuntu平铺左、右、上、下、1/2、1/4窗口(脚本)

前言

之前因为一直在用Ubuntu 18或者Ubuntu 20然后发现装了GNOME插件后,电脑在使用过程中,会时不时的卡死(鼠标没问题,键盘输入会有10-20秒的延迟)频率基本是一小时一次,因为这种卡顿会很容易打断思路,所以我重装了系统,从最小化安装开始,什么软件都经过我一手安装了(没有安装GNOME插件)发现没有卡顿的现象了(初步排查是GNOME插件的问题)。

所以就有了这篇用脚本实现窗口平铺的文章。如何你们用插件没有这个BUG那么可以直接下载GNOME- WinTile插件就可以实现了。

正文

创建脚本文件/usr/local/bin/ubuntu_move_windows,内容如下:

#!/bin/bash
ScriptVersion="1.0"

unset key
unset file
unset directory

wid=$(xwininfo -root | grep Width | awk '{print $2}')
hei=$(xwininfo -root | grep Height | awk '{print $2}')

if [ "$(xrandr 2>/dev/null | grep ' connected' | wc -l )" == "1" ];then
	half_wid=$(expr $wid / 2)
	half_hei=$(expr $hei / 2)
else
	half_wid=$(expr $wid / 4)
	half_hei=$(expr $hei / 2)
fi

windwos_name=":ACTIVE:"

main(){
	local offset=0
	if [ "$second_screen" == "2" ];then
		offset=$wid
	fi
	if [ "$key" == "left" ];then
		#置于左半屏幕
		wmctrl -r $windwos_name -e 2,$offset,0,$half_wid,$hei
	elif [ "$key" == "right" ];then
		#置于右半屏幕
		wmctrl -r $windwos_name -e 2,$(expr $half_wid + $offset),0,$half_wid,$hei
	elif [ "$key" == "u" ];then
		#置于左上屏幕
		wmctrl -r $windwos_name -e 2,$offset,0,$half_wid,$half_hei
	elif [ "$key" == "i" ];then
		#置于右上屏幕
		wmctrl -r $windwos_name -e 2,$(expr $half_wid + $offset),0,$half_wid,$half_hei
	elif [ "$key" == "j" ];then
		#置于左下屏幕
		wmctrl -r $windwos_name -e 2,$offset,$half_hei,$half_wid,$half_hei
	elif [ "$key" == "k" ];then
		#置于右下屏幕
		wmctrl -r $windwos_name -e 2,$(expr $half_wid + $offset),$half_hei,$half_wid,$half_hei
	elif [ "$key" == "top" ];then
		#置于上半屏幕
		wmctrl -r $windwos_name -e 2,0,0,$wid,$half_hei
	elif [ "$key" == "down" ];then
		#置于下半屏幕
		wmctrl -r $windwos_name -e 2,0,$half_hei,$wid,$half_hei
	elif [ "$key" == "center" ];then
		#居中屏幕
		get_current_windows_size
	fi
}

get_current_windows_size(){
	windows_wid=$(xwininfo -id $(xdotool getactivewindow) | awk '/Width/ {print $2}')
	windows_hei=$(xwininfo -id $(xdotool getactivewindow) | awk '/Height/ {print $2}')
	wmctrl -r $windwos_name -e 2,$(expr $(expr $wid - $windows_wid ) / 2),$(expr $(expr $hei - $windows_hei ) / 2),$windows_wid,$windows_hei
}


usage (){
	echo "Usage :  $(basename "$0") [options] [--] argument-1 argument-2

	Options:
	-h, --help                  Display this message
	-d, --debug                 Debug model run
	-v, --version               Display script version
	-p, Screen to be displayed, E.g: -p [1|2] Suitable for multiple monitors
	-l, Move windows to Left
	-r, Move windows to Right
	-u, Move windows to Left-Up
	-i, Move windows to Right-Up
	-j, Move windows to Left-Down
	-k, Move windows to Right-Down"

}

while getopts ":hp:vlruijkctdw:D:-:" opt; do
	case "${opt}" in
		h) usage && exit 0;;
		p) second_screen="${OPTARG}";;
		v) echo "$0 -- Version $ScriptVersion"; exit ;;
		l) key="left";;
		r) key="right";;
		u) key="u";;
		i) key="i";;
		j) key="j";;
		k) key="k";;
		t) key="top";;
		d) key="down";;
		c) key="center";;
		w) windwos_name="${OPTARG}";;
		D) directory=${OPTARG};;
		-) case "${OPTARG}" in
			help) usage && exit 0;;
			version)    echo "$0 -- Version $ScriptVersion"; exit ;;
			file)       file=${!OPTIND}; OPTIND=$((OPTIND+1));;
			directory)  directory=${!OPTIND}; OPTIND=$((OPTIND+1));;
			*)          echo "Invalid option: --${OPTARG}" >&2 && exit 1;;
		esac;;
	:) echo "Option -${OPTARG} requires an argument." >&2 && exit 1;;
	*) echo "Invalid option: -${OPTARG}" >&2 && exit 1;;
esac
done
shift $((OPTIND-1))

main "$@"

保存写入后,给这个文件添加执行权限:sudo chmod +x /usr/local/bin/ubuntu_move_windows 。 然后来到设置中添加键盘快捷键-自定义快捷键,如下:
在这里插入图片描述
在这里插入图片描述
这个快捷键是按照Mac OS里的Magnet软件来设置的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/443135.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【职言】三年功能测试,一些测试工作的“吐槽”

以下为作者观点: 概述 作为功能测试,我也分享下日常工作中功能测试值得吐槽的问题,由于工作时间不长且未进过大厂,不了解大公司的工作模式和流程,所以自己的方法和理解都是基于中小公司的工作经验总结,应…

Linux 之五:权限管理(文件权限和用户管理)

1. 文件权限 在Linux系统中,文件权限是一个非常基础且重要的安全机制。它决定了用户和用户组对文件或目录的访问控制级别。 每个文件或目录都有一个包含9个字符的权限模式,这些字符分为三组,每组三个字符,分别对应文件所有者的权限…

2024蓝桥杯每日一题(差分)

一、第一题:空调 解题思路:差分 希望P减掉T后就相当于从0到New_P,想到得到New_P只需要对全0数组进行若干次区间加操作,所以只需要对New_P数组进行差分,累加正数和负数,哪个绝对值大答案就是那个。 …

【深度学习笔记】6_8 长短期记忆(LSTM)

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 6.8 长短期记忆(LSTM) 本节将介绍另一种常用的门控循环神经网络:长短期记忆(long shor…

二叉树的先序遍历详解(小白也懂)(附带中序,后序代码)

文章目录 二叉树的先序遍历(分而治之思想)样例图函数的递归调用源代码运行结果 二叉树的先序遍历(分而治之思想) 代码在文章底部。 先序遍历又叫先根遍历,顾名思义:遍历顺序为根,左子树,右子树。 样例图 本文将对以下二叉树进…

关于 JVM

1、请你谈谈你对JVM的理解? JVM由JVM运行时数据区(图示中蓝色框包含部分)、执行引擎、本地库接口、本地方法库组成。 JVM运行时数据区,分为方法区、堆、虚拟机栈、本地方法栈和程序计数器。 1.方法区 Java 虚拟机规范中定…

YOLOv8-Seg改进:SPPF涨点篇 |引入YOLOv9的SPPELAN

🚀🚀🚀本文改进:SPP创新结合ELAN,来自于YOLOv9,助力YOLOv8,将SPPELAN代替原始的SPPF 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割…

day59 线程

创建线程的第二种方式 实现接口Runnable 重写run方法 创建线程的第三种方式 java.util.concurrent下的Callable重写call()方法 java.util.concurrent.FutureTask 创建线程类对象 获取返回值 线程的四种生命周期 线程的优先级1-10 default为5,优先级越高&#xff0c…

JavaEE进阶(15)Spring原理:Bean的作用域、Bean的生命周期、Spring Boot自动配置(加载Bean、SpringBoot原理分析)

接上次博客:JavaEE进阶(14)Linux基本使用和程序部署(博客系统部署)-CSDN博客 目录 关于Bean的作用域 概念 Bean的作用域 Bean的生命周期 源码阅读 Spring Boot自动配置 Spring 加载Bean 问题描述 原因分析 …

JavaEE企业开发新技术

目录 2.1 Class对象基本概念 1、概念 2.2 Class对象的获取方式 2.3基本数据类型的Class对象 1、概念 2.4 反射的基本概念 概念 2.5 Class对象的基本使用-1 2.6 Class对象的基本使用-2 newInstance()和new()区别: 2.1 Class对象基本概念 1、概念 反射的…

面试经典150题——合并两个有序链表

You just work on it. Time will do the rest! 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目还是比较简单的,通过分析题目,我们可以知道题目中关键信息为: 所以我们只需要从前向后遍历两个链表,在两个链表不空的情况下&…

白皮书发布|超融合运行 K8s 的场景、功能与优势

目前,不少企业都使用虚拟化/超融合运行 Kubernetes 和容器化应用。一些用户可能会有疑惑:既然 Kubernetes 可以部署在裸金属上,使用虚拟化不是“多此一举”吗? 在电子书《IT 基础架构团队的 Kubernetes 管理:从入门到…

Android中显式Intent和隐式Intent的区别

1、intent的中文名 称是意图,Intent是各个组件之间信息沟通的桥梁, 既能在Activity之间沟通,又能在Activity与Service之间沟通,也能在Activity与Broadcast之间沟通 **intent组成元素的列表说明**2、显式Intent,直接指定…

河北专升本(C语言编程题)

一:基础算法原理 1. 冒泡排序 原理:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例,第一轮比较后,所有数中最大的…

软考71-上午题-【面向对象技术2-UML】-UML中的图2

一、用例图 上午题,考的少;下午题,考的多。 1-1、用例图的定义 用例图展现了一组用例、参与者以及它们之间的关系。 用例图用于对系统的静态用例图进行建模。 可以用下列两种方式来使用用例图: 1、对系统的语境建模&#xff1b…

自动驾驶革命:解密端到端背后的数据、算力和AI奇迹

作者 |毫末智行数据智能科学家 贺翔 编辑 |祥威 最近,特斯拉FSD V12的发布引发了业界对端到端自动驾驶的热议,业界纷纷猜测FSD V12的强大能力是如何训练出来的。从马斯克的测试视频可以大致归纳一下FSD V12系统的一些核心特征: 训练数据&am…

Redis的集群模式

Redis有三种主要的集群模式,用于在分布式环境中实现高可用性和数据复制。这些集群模式分别是:主从复制(Master-Slave Replication)、哨兵模式(Sentinel)和Redis Cluster模式。 主从模式 主从复制是Redis最简单的集群模式。这个模式主要是为了解决单点故障的问题&a…

探索Cglib:解析动态代理的神奇之处

文章目录 CGLIB介绍CGLIB使用示例CGLIB核心原理分析代理类分析代理方法分析 FastClass机制分析 CGLIB介绍 CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与…

【echarts】xAxis鼠标事件失效问题

项目中用到echarts柱状图,出现x轴标签文字过长重叠问题,在pass掉标签倾斜、换行方案之后最终决定限制文字长度,超出以…占位,鼠标悬浮时显示完整tooltip。 但编写过程中发现xAxis鼠标事件无法触发,只有bar区域是可触发…

19 卷积层【李沐动手学深度学习v2课程笔记】

目录 1. 从全连接到卷积 2. 卷积层 3. 图像卷积代码 3.1 互相关运算 3.2 实现二维卷积层 3.3 图像中目标的边缘检测 3.4 学习卷积核 4. 小结 1. 从全连接到卷积 在欧几里得几何中,平移是一种几何变换,表示把一幅图像或一个空间中的每一个点在相同…