都知道 Mac 上的触摸板非常好用,简单的手势就能实现十几种操作,从单指,双指,三指,到四指,甚至五指,从轻点,按压,到滑动,到捏合,组合起来能实现非常多的操作。
通过不同的组合可以得到非常多的功能。一些比较重要的操作列在了下面。
一个手指轻轻点击,可以选中目标;
日常使用 Linux Mint 对手势要求倒也没有那么高,很多上面列举的功能都能用快捷键来实现,比如查词,我就是用 GoldenDict 的全局快捷键 Ctrl+C Ctrl+C,不过倒是要事先选中。比如切换 Workspace,我是用 Alt + 1/2/3/4 来控制的,其他切换应用倒也都有对应的快捷键,不过有时候确实感觉到 Mac 上触摸板在浏览网页时非常舒服,虽然我用 Vimium 映射了一些快捷键,H/L 但有时候就是没触摸板方便。
第一步安装必要的依赖:
sudo apt install python3 python3-setuptools python3-gi libinput-tools python-gobject xdotool wmctrl
将当前用户加入 input 用户组:
sudo gpasswd -a $USER input
然后安装 libinput-gestures
需要到 GitHub 项目页面手工安装 libinput-tools。
git clone https://github.com/bulletmark/libinput-gestures.git
cd libinput-gestures
sudo make install (or sudo ./libinput-gestures-setup install)
安装后执行
libinput-gestures-setup autostart
libinput-gestures-setup start
默认的手势配置在 /etc/libinput-gestures.conf
下,如果要创建自定义的配置,可以将配置内容拷贝到 ~/.config/libinput-gestures.conf
然后编辑该文件。更多 libinput-gestures 的说明可以参考 GitHub 页面
再安装 gestures 图形化安装界面
git clone https://gitlab.com/cunidev/gestures.git
cd gestures
sudo python3 setup.py install
然后从菜单中搜索 gestures 就能打开。
当然如果想用配置文件来配置,直接编辑 ~/.config/libinput-gestures.conf
文件也可以。
Gestures 实现的强大功能都依赖于 Cinnamon 中非常丰富的快捷键功能,在设置中能看到非常丰富的快捷键设置,在此定义好快捷键就能在 xdotool 中使用。Linux Mint 默认的快捷键可以在此查看
折腾一番后可以实现这些功能。
Cinnamon 中 Toggle Scale view (display all windows on current Workspace) 的快捷键是 Ctrl + Alt + Down,所以:
xdotool key Ctrl+Alt+Down
Cinnamon 的桌面我的快捷键是 Super+d 来显示桌面,所以可以设置:
xdotool key super+d
xdotool key Ctrl+Alt+Left
xdotool key Ctrl+Alt+Right
其他组合同理。
更多的按键代码可以在这里 看到。
外延,如果喜欢使用鼠标手势,Linux 下可以尝试一下 EasyStroke,个人不太喜欢使用鼠标,所以就暂时列在这里,暂不使用。
这篇文章看开始陆陆续续记录一下用过的 Vim Plugin,虽然有些一直也在用但从没有好好整理过,正好这篇开一个计划吧。
Ack.vim 在 vim 中使用 ack 或者 ag 来搜索,通过 Quickfix 来提供所搜结果
首先放上链接
我使用 Vundle 管理,安装更新就不展开,这里重点介绍一下该插件。这里需要注意 ack.vim 需要依赖 ack >= 2.0 及以上版本。
brew install the_silver_searcher
sudo apt install silversearcher-ag
在 ~/.vimrc
中 Vundle 安装
Plugin 'mileszs/ack.vim'
let g:ackprg = 'ag --nogroup --nocolor --column'
ack.vim 的功能是给 Vim 提供 ack 的功能,可以在编辑器中调用 ack 工具来进行搜索,并友好的展示。
在 Vim 中直接
:Ack [options] {pattern} [{directories}]
说明:
搜索的结果会显示在窗口中,显示的格式是文件名,内容在文件中的行数以及内容。在该窗口中回车 Enter
会直接跳到该文件中。
? a quick summary of these keys, repeat to close
o to open (same as Enter)
O to open and close the quickfix window
go to preview file, open but maintain focus on ack.vim results
t to open in new tab
T to open in new tab without moving to it
h to open in horizontal split
H to open in horizontal split, keeping focus on the results
v to open in vertical split
gv to open in vertical split, keeping focus on the results
q to close the quickfix window
" ack.vim
" 使用 leader + a search
cnoreabbrev Ack Ack!
nnoremap <Leader>a :Ack!<Space>
if executable('ag')
let g:ackprg = 'ag --vimgrep --nogroup --column'
endif
" 高亮搜索关键词
let g:ackhighlight = 1
更多可以使用 :help ack
来查看
更多可以参考我的 dotfiles
大概一两年前就听说了 Vivaldi 这样一款浏览器,它使用 Chromium 做内核,创始人是从 Opera 浏览器出来的,不满 Chrome 横扫浏览器市场,没有给 Opera 一点喘息的机会,很多 Opera 的特性在 Chrome 上都被摘掉了。所以他们就开始搞了这一个 Vivaldi 浏览器,我记得当时听到的第一个宣传语是,快。想来 Chrome 最初打开市场时的宣传语也是快,但是多少年过去了 Chrome 虽然自身保持非常干净,但是加上自定义的扩展,也变得越来越臃肿了,但倒是也在一个可以接受的范围内。两年前 Vivaldi 依靠这一条宣传没有吸引到我,但是我也下载尝试,并且这两年来一直存在我的电脑中。我记得之前在我看来最大的缺点便是不能同步数据,而这个功能也在之前的更新中被加上了。所以今天就非常值得拿出来讲一讲。
电脑中一直装着 Chrome 和 Vivaldi,但绝大多数情况下我只会打开 Chrome,毕竟这里累积了我多年的书签,扩展,同步的所有标签。
我总结 Chrome 让我无法抛弃原因:
从 Vivaldi 的维基百科 地址上可以知道 Vivaldi 正式诞生于 2016 年 4 月 16 号。如今也已经过去了 3 年多,同样的是特性也增加了很多。
我一直期待着加入同步功能,直到 2.2 版本也终于加上了。
说到当年的 Opera 很多人第一印象便是新标签页中的快速拨号样式,同样 Vivaldi 继承了该优点。
因为使用的是 Chromium ,所以 Chrome 的所有优点, Vivaldi 都有,并且也可以使用 Chrome 的扩展。
当年因为快,抛弃了 Firefox 而选择了 Chrome,而如今竟然因为快而抛弃了 Chrome。和别人推荐的时候说的第一条理由就是快。
使用 F2 弹出命令行,可以直接打开书签,搜索关键字,查看历史,等等等等。
Opera 当前非常流行的手势被完全引用到了 Vivaldi,但是我并不是很喜欢鼠标手势,我宁愿用快捷键。
包括整个网页的,和局部选择的
虽然本人到并不太介意界面,但是 Vivaldi 的细节做的确实非常贴心,加载页面的进度条,甚至无形中让人觉得页面加载变快了,切换标签页时的缩略预览图,等等都非常贴心。
之前打开 Vivaldi 惊喜的发现竟然能够在浏览器中直接对当前的网页进行笔记,还能自动保存截图,简直太贴心了。
更多的功能有待你来发现
暴露在互联网上的服务器非常容易被恶意程序进行端口扫描,以前也整理过一篇 VPS 安全设置 的文章,但都是一些比较基础的设置,能够绕过一些简单的端口扫描,但是并不能从根本上解决端口扫描的问题。
Port knocking 通过防火墙的帮助能够实现,只有你按照特定方式请求后才开放端口,增加了一层保护。主要防止恶意攻击者通过端口扫描来对机器进行攻击。
这篇文章就通过 knockd
的使用来介绍一下 Port knocking 。
Note: 本文只演示 IPV4 下的配置。
Port knocking 类似于
在配置 knockd 之前,首先需要了解 iptables 的基本使用。
允许本地回环地址,允许内部的网络访问
sudo iptables -A INPUT -i lo -j ACCEPT
允许当前活跃的连接继续保持
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT
允许本地 80 端口
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
除此之外组织所有的访问 (需要特别注意,输入这行命令前一定要非常清楚你即将做的事情)
sudo iptables -A INPUT -j DROP
查看
sudo iptables -S
持久化 iptables 设定
sudo apt-get install iptables-persistent
sudo service iptables-persistent start
sudo apt install knockd
管理员打开
sudo vim /etc/knockd.conf
编辑如下内容
[options]
UseSyslog
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
解释
在最上方 options 中可以看到 UseSyslog,表示的是 knockd 会将日志记录到系统的日志中,路径是 /var/log/messages
如果想要指定一个可以使用
LogFile = /path/to/log/file
在下方是两块配置,名字可以是任意,例子中的两块配置分别是打开 SSH 默认端口,和关闭 SSH 端口。
敲门的顺序由 sequence
来指定。当然正常配置时请换用尽量随机的端口。
seq_timeout
和 tcpflags
分别用来做校验,请求包需要满足这两个条件,而 command
则是指定了满足条件后的动作。
在该例子中就是打开 SSH 默认的 22 端口。但是如果仔细看就会发现 iptables 中使用的是 -A
参数,会将这一条规则放到最后,那如果在 DROP 后面就不会有作用了,所以需要改成
command = /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT
使用 -I
来插入到规则列表开头。
修改配置
sudo vi /etc/default/knockd
修改内容
START_KNOCKD = 1
启动服务
sudo service knockd start
此时去测试
ssh root@server_ip_address
就会发现 22 端口被拒绝了。
然后在本地计算机上
for x in 7000 8000 9000; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x server_ip_address; done
然后在 ssh 连过去。
完事之后
for x in 9000 8000 7000; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x server_ip_address; done
当然你可以在客户端直接使用 knockd
knock server_ip_address 7000 8000 9000
结束时
knock server_ip_address 9000 8000 7000
[options]
UseSyslog
[SSH]
sequence = 5438,3428,3280,4479
tcpflags = syn
seq_timeout = 15
start_command = /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 10
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
当时安装系统的时候就直接插入了一块硬盘,安装在了第一块机械硬盘上面,虽然读写也没有遇到什么瓶颈,但是记录以做备份,可以用于将系统迁移到 SSD 上。
下面的方法未经验证,慎用。应用可以迁移,但是一些配置可能无法成功备份到另一块硬盘中。
2020 年 1 月 10 号更新。
我的 NAS 没有组 RAID,因为磁盘也不是一次买的,所以是一次次增加到 NAS 中的,每块磁盘都是独立的 Volumn,在这种情况下系统盘损坏也就无法从其他盘恢复了。
上面的方法在硬盘还能正常运行的时候可以试试,但是从昨天起发现 NAS 系统盘突然只读,而无法写入,经过一系列诊断初步感觉是硬盘故障了,所以赶紧备份系统盘数据,也幸亏 NAS 在要磁盘完全挂之前还保存了读的功能,所以赶紧 ssh 到后台 rsync 系统盘数据到其他盘。
备份完普通文件剩下的配置和应用就比较难备份了,前前后后花了很长时间去尝试和配置这些应用,但是最糟糕的可能就是要从头开始了。这么多应用和配置都要从头配置,想想就头疼。
在网上经过一番调查,QNAP QTS 系统和数据是分开存储的,所以即使系统盘挂掉,其他磁盘不用其他操作,可以更换新的系统盘,然后安装新系统,然后在新系统中恢复原来的数据。
先在”存储与快照总管”,安全卸载存储区。所有的盘都卸载掉,然后关机。换一个用来安装系统和应用的硬盘,重装系统。装好之后插上旧数据硬盘。在存储与快照总管那里,扫描闲置磁盘。然后原来的数据就恢复了。
安全卸载磁盘:
恢复磁盘:
该方法也适用于将存储池移动到其他 NAS 中。1
对于我这种只用了一块磁盘一个静态卷来安装系统的,恢复起来就比较麻烦了,大思路就是:
/share/CACHEDEV1_DATA/.qpkg/
目录下应用数据及配置在 设置中进行如下操作开启 jQuery 支持:
记录一下使用 Tampermonkey 调试本地脚本。
首先设置 Tampermonkey 插件的设置
Allow access to file URLs
然后在文件中使用 @require
引入外部文件。
// ==UserScript==
// @name Debug Userscript
// @namespace https://github.com/einverne/userscripts
// @version 0.1
// @description This is a debug script to load userscripts from local file system. NOTICE, you need to turn on Allow access to file URLs to @require local file https://www.tampermonkey.net/documentation.php
// @author Ein Verne
// @match http*://*
// @include http://*
// @include https://*
// @include *
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_getResourceText
// @require https://unpkg.com/dexie@latest/dist/dexie.js
// @require file:///home/einverne/Git/userscripts/douban_export/douban_exporter.user.js
// ==/UserScript==
(function () {
'use strict';
console.log("debug script start here");
// Your code here...
})();
很多人在程序中会处理 non-ASCII 字符,在日志中,在终端显示中等等。
检查 locales 是否安装
dpkg -l locales
如果 locales 之前显示 ii
表示已经安装了,否则
sudo apt install locales
重新配置
dpkg-reconfigure locales
使用命令 locale
查看配置
locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
LC_TELEPHONE=zh_CN.UTF-8
LC_MEASUREMENT=zh_CN.UTF-8
LC_IDENTIFICATION=zh_CN.UTF-8
LC_ALL=
在 .bashrc
中放入如下设置:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
某些情况下在终端 less /path/to/logfile
会显示 \u
开头的中文编码,这是 unicode 编码,大部分情况下 less 会使用 UTF-8 去查看文件。但是如果文件编码格式非 UTF-8 那么可能会有些问题。
使用 file /path/to/file
来查看文件的编码。
BPMN 中可执行的工作流包含一系列不同类型的节点,这些节点可以被用来连接生成有序的工作流。BPMN 2.0 规范定义了三种主要的类型:
jBPM6 并没有实现 BPMN 2.0 规范中的所有元素和属性,但是提供了大部分重要的子集。
Events
Activities
Gateways
本文主要内容总结自 jboss jbpm 官方文档的第 8 章内容。
Linux Mint 在连接 802.1x EAP 网络时,一直无法弹出用户名密码弹窗,导致一直无法连接这些网络。今天查了一下,需要手动进行连接。
打开 Network Manager,选择 Connect to Hidden Network.
选择连接即可。