原标题:爆改 Linux 下最好用的截图工具!

公众号关注 “五分钟学算法”

设为 “星标”,带你挖掘更多开发神器!

因为日常Linux办公,经常有截图顺带简单编辑的需求。

在Windows上这项工作基本一直是QQ微信代劳,但是在Linux上这两个都比较拉胯,无奈之下找了几种Linux下的截图工具替代

试了几个比较流行的,感觉下来最好用的算是 flameshot ,功能齐全运行稳定,图标也挺新潮,操作界面也很简洁,基本毛病没得挑。但唯一的缺点就是: 「没有全局热键。」

好在 flameshot 是个开源软件,下下来源码瞅了一眼,是我熟悉的Qt写的,感觉全局热键这部分可以自己整合一下。

源码中对全局热键的实现只放开了 windows ,而且从源码来看好像也只预留了接口没实现功能。简单研究了一下,通过一个名为 qxtglobalshortcut5 的Qt全局热键第三方库可以轻松实现

使用

先把现成的工具放出来吧,伸手党福利:https://kdocs.cn/l/sgGCbHx3wSaM[金山文档] flameshot

复制链接到浏览器直接下载,启动后任务栏会有图标,点击 Take Screenshot 即可截图

点击一次截图后,全局热键才可以使用。“Ctrl + F5” 即可触发截图(ubuntu源内自带的qt5.5编译会有这个问题,qt5.7编译出的程序直接启动后全局热键就可以用)。

自己编译的话是有翻译的,这里单程序没有翻译文件,所以都是英文,不过不影响使用。

效果如图:具体的使用快捷键和功能去其他地方查一下吧,我就不搬运了,都是很基本的截图编辑操作,好用得很:

建议在设置里开机自启,或者加 nohup ...... & 启动,不占用终端。

这个程序我是用的 ubuntu16.04 源内自带的库编译的,所以仅仅适用于ubuntu 16.04。换到其他Linux系统不一定能用。其他Linux平台会因为不自带qt或者自带qt库版本不一样导致不能用的问题,最好的办法是自行下载编译,方法如下:

编译(Ubuntu 16.04环境)

环境准备

Ubuntu16.04自带了一些Qt5.5.1的核心库,但是要编译的话还需要 qmake , lrelease 等工具,还有 x11extras svg 等qt插件支持,需要安装:

sudo apt-get install qt5-default

sudo apt-get install qttools5-dev-tools

sudo apt-get install libqt5svg5-dev

sudo apt-get install libqt5x11extras5-dev

sudo apt-get install qtbase5-private-dev

都直接从源里下,这样能保证都是配套同一个版本的。

获取flameshot源码:

地址: https://github.com/lupoDharkael/flameshot.git

git clonehttps://github.com/lupoDharkael/flameshot.git

编译源码cdflameshot

mkdir build

cdbuild

qmake ../

# 报错没有qmake的话,要装上面的库

make -j`nproc`

sudo ln -sf ` pwd`/flameshot /usr/bin/flameshot

编译完成后,会生成一个可执行文件 flameshot ,可以直接放一个软连接到 /usr/bin 下面

增加全局热键功能

一、获取qxtglobalshortcut5项目到此项目中

# 离开刚才的编译目录

cd../

# pwd: ~/flameshot

git clonehttps://github.com/ddqd/qxtglobalshortcut5.git

flameshot 项目和 qxtglobalshortcut5 这个项目都是qt的pro管理的,整合起来非常方便在获取到 qxtglobalshortcut5 项目后, flameshot 项目下就有这个玩意儿:

qxtglobalshortcut5 的实现已经相当完善了,引入后一行都不需要改,只需要改写 flameshot 项目在 flameshot.pro 文件中添加一行: include(qxtglobalshortcut5/qxt.pri)

QT += core gui widgets network svg

unix:!macx {

QT += dbus

}

CONFIG += c++ 11link_pkgconfig

include(qxtglobalshortcut5/qxt.pri) # 这一行是新加的

#CONFIG += packaging # Enables "make install" for packaging paths

TARGET = flameshot

TEMPLATE = app

二、源码里注册全局热键

打开 src/core/controller.cpp 这个文件,找到Controller的构造函数,在这里注册全局热键:

Controller::Controller : m_captureWindow( nullptr) {

qApp->setQuitOnLastWindowClosed( false);

// init tray icon

# ifdefined(Q_OS_LINUX) || defined(Q_OS_UNIX)

if(!ConfigHandler.disabledTrayIconValue) {

enableTrayIcon;

}

/** 注册全局热键! */

QxtGlobalShortcut* shortcut1 = newQxtGlobalShortcut(QKeySequence( "Ctrl+F5"), this);

/** 全局热键触发的函数! */

connect(shortcut1, SIGNAL(activated), this, SLOT(shortcutActiveCapture));

# elifdefined(Q_OS_WIN)

enableTrayIcon;

GlobalShortcutFilter *nativeFilter = newGlobalShortcutFilter( this);

qApp->installNativeEventFilter(nativeFilter);

connect(nativeFilter, &GlobalShortcutFilter::printPressed,

this, [ this]{

this->requestCapture(CaptureRequest(CaptureRequest::GRAPHICAL_MODE));

});

# endif

QString StyleSheet = CaptureButton::globalStyleSheet;

qApp->setStyleSheet(StyleSheet);

}

这里除了注释的两行是我加的,其他都是原来的代码,这个库支持字符串的形式注册全局热键, Ctrl+F5 可以换成你自己喜欢的。

因为没有在 Window 上测试过们这里只加给了 Q_OS_LINUX 环境,理论上这个全局热键的库各平台都是通用的,不过我只需要Linux。

三、全局热键的处理函数

上面给 shortchut1 注册了一个槽函数 shortcutActiveCapture ,这个函数还没有实现,这个函数的功能很简单,只需要调用截图函数就行,可以查一下我们点击截图触发的是哪一个函数,我们也调用同一个函数即可:

src/core/controller.h 文件,在头文件里,添加函数声明:

privateslots:

voidstartFullscreenCapture( constuint id = 0);

voidstartVisualCapture( constuint id = 0,

constQString &forcedSavePath = QString) ;

voidstartScreenGrab( constuint id = 0, constintscreenNumber = -1);

voidhandleCaptureTaken(uint id, QPixmap p);

voidhandleCaptureFailed(uint id);

voidshortcutActiveCapture; //这一句是追加的

src/core/controller.cpp 文件,在实现文件里,添加函数实现:

voidController::shortcutActiveCapture

{

this->startVisualCapture( 0,QString);

}

「四、重新编译运行」

进入到刚才的编译目录,重新执行qmake,make编译就可以了。

cdbuild

qmake ../

make

编译好后可以试一下,生成的可执行程序运行后可以通过全局热键 Ctrl+F5 进行截屏编辑操作。

这个改动非常简单,通篇使用的是Ubuntu源内自带的工具和库。即使没怎么接触过qt的人,按照上面的套路也可以把这个工具轻松整出来。

如果是Qt老炮,可以通过本地编译出来或者本地安装的其他版本的qt编译这个程序,目前尝试qt5.5.1全局热键还是有点问题的,上面也提到了。我本地用的qt5.7没有这个问题。

存在问题:失去焦点就消失的窗体

理论上可以点击截图的地方,完全用不到全局热键,只有一种场景对 全局热键截图 这个功能有刚需:失去焦点窗体就消失的情况。比如,你在 chorme 浏览器的某个标签页上右键弹出一个对话框,你想截图这个对话框里的内容,但是一旦你鼠标去点击截图的按钮,这个对话框就会因为失去焦点而消失。这个时候就需要截图全局热键的功能来实现:

或者对一些鼠标悬停才会显示的内容 tooltips 的截图也是这样:

但遗憾的是,在Linux平台上,这个全局快捷键截图仍然不能非常完美的解决所有“失焦即焚”窗体的问题

比如说你随便打开一个窗口,鼠标挪到左上角随便点一个选项卡(文件、修改、视图等等的),当他出现菜单时,你想截图这个菜单的内容,你就会发现全局热键不好使了:

当这个红框窗体拿到焦点的时候,全局热键就不好使了,为了让全局热键生效让他失去焦点,这个窗体又会消失。进入到一种无法截图的尴尬境地。(我这张是对着虚拟机截出来的)

但这个问题并不是 qxtglobalshortcut5 实现的问题,而是X11本身的限制,一个直观的证据就是:在这种情况下,你键盘上的 PrintScreen 按键也会失效。

为了这个问题大概看了下 qxtglobalshortcut5 的Linux部分的实现,确实已经是x11提供的 XGrabKey 所能提供功能的极限了,如果硬要让自己全局热键的优先级高于窗口管理器,可能得写驱动级别的程序来搞。

存在问题2:输入文字不支持输入法

文字只能输入英文,这个也比较坑,目前还在想办法,目测可以用加载ibus/fcitx输入法插件的方式解决,后期解决后回来更新,有了解的大佬欢迎不吝赐教。返回搜狐,查看更多

责任编辑:

linux下好用的截图软件下载,爆改 Linux 下最好用的截图工具!相关推荐

  1. linux软件安装非系统盘,linux操作系统可不可以像安装windows软件一样在windows系统下的硬盘上安装...

    linux操作系统可不可以像安装windows软件一样在windows系统下的硬盘上安装 答案:2  信息版本:手机版 解决时间 2020-07-24 14:13 已解决 2020-07-23 16: ...

  2. Win32环境下轻松调试单板安全模式软件下载功能

    Win32环境下轻松调试单板安全模式软件下载功能 温辉敏(wenhm@sina.com) 摘要:本文首先提出了在单板环境下调试软件下载功能的低效率和复杂性,然后进行了Win32环境下调试软件下载功能的 ...

  3. linux服务器下数学软件下载,GeoGebra For Linux

    GeoGebra For Linux是一款动态几何软件.其绘图的基本元素包括点,直线,线段,多边形,向量,圆锥曲线和函数.这些绘图元素均可在创建后直接在屏幕或者使用命令动态改变. GeoGebra可以 ...

  4. veket linux软件下载6,veket linux官方

    这是veket linux系统下载,应该让别人的生活因为有了我们的生存而更加美好--这个世界有太多的不公平,也许大家都曾受过欺骗和伤害,但仍然建议大家给亲人多些关怀,对陌生人多些善意和微笑,在保护好自 ...

  5. android root截图软件下载,截屏软件(无需ROOT)

    ScreenshotIt是一款功能简单而专一的小软体,利用它你能够非常方便的对你的Android手机进行捉图操作,并将截取的萤幕快照储存为图片. 软体功能: -裁剪你的萤幕截图: -萤幕截图状态栏按键 ...

  6. 免费邮件服务器软件 linux,U-Mail for linux 64-bit 邮件服务器软件下载|U-Mail for linux 64-bit 邮件服务器软件官方下载-太平洋下载中心...

    U-Mail for linux 64-bit 邮件服务器软件是网络工具频道下深受用户喜爱的软件,太平洋下载中心提供U-Mail for linux 64-bit 邮件服务器软件官方下载. U-Mai ...

  7. mats显存测试软件linux环境,Mats显存检测软件下载-Mats显存检测软件最新版下载-微侠手游网...

    Mats显存检测软件是一款专业的显卡检测工具,全系统都是中文的,是一款装机必备的硬件工具,帮助你了解自己的显卡运作情况,有任何问题都可以第一时间暂停,看完的小伙伴可以关注微侠网下载最新版软件以及查看最 ...

  8. linux下查看已安装的软件与卸载,(转)linux下查看已安装的软件与卸载

    因为linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了.总结起来就是这样几类: 1.rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa ...

  9. 深度Linux下的中望CAD软件,中望CAD Linux预装版的功能介绍,在Deepin和UOS下安装很简单...

    如果你使用的是Deepin和UOS操作系统,那么安装中望CAD Linux预装版非常的简单,只需要打开应用商店,然后搜索中望就可以对出来的结果进行安装了,下面介绍一下中望CAD Linux预装版的功能 ...

最新文章

  1. 使用pydub实现训练声音数据集加噪
  2. 分享 - Social.framework
  3. 疾风之刃鸿蒙炸裂,疾风之刃二周年版本12月1日上线_疾风之刃天武僧二觉率先开放_游戏堡...
  4. 一级建造师考试通过了 !
  5. 开放下载!《15分钟打造你自己的小程序》(内附详细代码)
  6. DISCUZ 嵌入点 输出插件模版内容
  7. 重写RadGrid及其注意事项
  8. 敏捷开发人员结构_开发人员可以在敏捷外观方面发表意见的4种方法
  9. linux添加自己的键盘映射,Linux 键盘映射
  10. 程序员的底色(IDE color scheme、CLI 命令行界面)
  11. 400是什么错误_404、403、405、500 | 常见网页错误代码解析
  12. Java Web架构实战篇:聊一聊前后端分离架构
  13. python冰雪奇缘使用教程_99 行 Python 代码实现《冰雪奇缘》特效?网友:大神碉堡...
  14. 良树机器人_揭开坑王高屋良树不为人知的一面,你看过这部《冥王计划》吗?...
  15. 2017-2018-2 《密码与安全新技术》第一周作业
  16. Lending Club贷款违约预测
  17. 跳过评价教师看成绩html,学校评优秀教师只看成绩,这种做法对吗?
  18. 2022 Java面试题道通科技
  19. 拼图代码-两张图片拼接
  20. 微信支付调用接口退款,返回SSL certificate not found: 是什么问题?

热门文章

  1. 众昂矿业刘金海:中国萤石产品分类及其用途
  2. 英语口语254之每日十句口语
  3. Spring Boot 使用七牛云存储图片并且使用自定义域名访问
  4. Tech Talk 活动回顾|云原生 DevOps 的 Kubernetes 技巧
  5. 函数的返回值return
  6. 这些话真的很风骚....
  7. APICloud AVM多端开发 |《生鲜电商app开发》项目源码深度解析
  8. CSS解决高度塌缩问题和外边距重叠问题
  9. ATE 测试及IC测试原理之 IDD测试
  10. 不谈F1的设备指纹都是耍流氓?