如何恢复Firefox会话中的url

昨天升级到了macOS Catalina 10.15 Beta (19A526h),发现Firefox无法打开了…

不得以,只能看下如何在不打开Firefox的情况下,将会话中打开的url拿出来。

首先,得找到Profile的问题,参考 https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data 找到位置,将Profile目录下的sessionstore-backups文件夹拷出来。

其中,recovery.jsonlz4文件即为会话的恢复信息,但是这个文件不是标准的lz4压缩文件,得使用特殊的工具来解压,在 https://github.com/avih/dejsonlz4 下载dejsonlz4源码,编译。

通过命令将jsonlz4解压成json:

./dejsonlz4 /path/to/recovery.jsonlz4 /path/to/output/recovery.json

接下来就是探索这个recovery.json的内容了,很简单:

  • jq keys查看这个json文件中的顶级key,比如cat recovery.json | jq keys
  • 查看某一个节点可以通过.来引用,比如jq '.[0].entrys'就是查看第零个元素中的entrys属性

最终,可以通过如下命令输出会话中所有的url:

1
jq -r '.windows[].tabs[].entries[].url' recovery.json 
阅读更多

macOS下使用ZMODEM协议上传/下载文件

有时候,我们ssh登录服务器操作(甚至经过跳板机),然后这个时候,我们想下载、上传一个文件,就必须重启启动一个终端,运行scp命令。这个非常的繁琐,而且要上传、下载的目录也需要自己复制粘贴,有没有办法能够在ssh会话中上传、下载文件呢?

查了下,还真有这么一个协议,叫ZMODEM

原理

下载文件

在服务器上执行sz(Send by ZMODEM),先在终端上输出**B00000000000000,然后客户端在终端发送指令,表示拒绝,还是接收(接收的话,就在客户端运行rz指令与服务端交互)

上传文件

在服务器上执行rz(Receive by ZMODEM),先在终端上输出rz waiting to receive.**B0100000023be50,然后客户端发送指令,表示取消,还是上传(上传的话,在客户端运行sz命令与服务端交互)。

可以看到在上述流程中,对Terminal的要求就是,遇到特殊指令,触发对应的操作(执行本地命令)。

遗憾的是,我一直使用的、macOS自带的Terminal.app不支持这个,所以我只能放弃Terminal.app,使用iTerm2(v3.3.0beta5)了。

如何配置

阅读更多

Firefox无法播放mp4格式的视频(Fedora)

最近又开始用起来Fedora了,昨天发现Firefox没法看视频:

console提示如下:

HTTP “Content-Type” of “video/mp4” is not supported. Load of media resource https://example.com/incorrect\_feedback.mp4 failed.
VIDEOJS: ERROR: (CODE:4 MEDIA_ERR_SRC_NOT_SUPPORTED) No compatible source was found for this media.

尝试了下fedora-cisco-openh264.repo提供的mozilla-openh264,还是无法播放。

看了下网上的说明,mozilla-openh264这个plugin,是为了在WebRTC会话中解码H.264的。

而网上所说的,安装gstreamer系列的,那是因为Firefox旧版本是使用gstreamer来解码的;新版的Firefox使用了ffmpeg来解码视频。

所以只需要安装compat-ffmpeg28就行了:

sudo dnf install compat-ffmpeg28

阅读更多

Wordpress报错“e.visibility is undefined”

在我的博客上,一直无法用Wordpress的古腾堡编辑器来编辑。

一打开就出现这个页面:

console上报错:“e.visibility is undefined”:

搜了下,发现确实有人提issue:https://github.com/WordPress/gutenberg/issues/12655。但是神奇的是,问题是由nginx配置导致的。

我原来在Nginx中对Wordpress的配置是:

但是看了下,无论是Nginx的官方文档,还是Wordpress的官方文档,都推荐如下配置:

1
2
3
location / {
try_files $uri $uri/ /index.php$is\_args$args;
}
阅读更多

Shadowsocks + simple-obfs + IPv6 [CentOS 7]

Sometimes, the network traffic need to be encrypted and obfuscated. shadowsocks + simple-obfs is a simple solution. shadowsocks is a socks5 proxy, with traffic encryption. all traffic through shadosocks will be encrypted. simple-obfs is used for obfuscate traffic. The upstream traffic encapsulation in HTTP or tls stream. The outer traffic will look like an HTTP session.

Server-side config

Install shadowsocks, simple-obfs

Enable copr and install:

curl https://copr.fedorainfracloud.org/coprs/antonchen/proxy/repo/epel-7/antonchen-proxy-epel-7.repo -o /etc/yum.repos.d/antonchen-proxy-epel-7.repo
dnf install shadowsocks-libev simple-obfs

Config shadowsocks:

# cat /etc/shadowsocks-libev/config.json
{
“server”: [“[::1]“, “127.0.0.1”],
“server_port”: 8888,
“password”: “Password”,
“timeout”: 600,
“method”: “salsa20”,
“fast_open”: true,
“workers”: 2,
“plugin”: “obfs-server”,
“plugin_opts”: “obfs=http;fast-open=true”
}

server with value ["[::1]", "127.0.0.1"] means listen 127.0.0.1 and ::1(localhost in IPv6), not listen all interface. fast_open means use TCP Fast Open, but with plugin, so actually 8888 is listened by obfs_-server, so we add fast-open=true to plugin_opts._ ipv6_first means while proxying DNS request, use IPv6 firstly. When you access google.com via proxy, you will use IPv6. Start it, make it autostart:

systemctl start shadowsocks-libev
systemctl enable shadowsocks-libev

Then,

阅读更多

ssh卡在debug1: SSH2_MSG_KEXINIT sent的解决办法

在公司通过kerberos登录ssh,完全没有问题。但是在家里通过l2tp连接vpn后,就无法登录了。

通过ssh -v查看日志,发现卡在debug1: SSH2_MSG_KEXINIT sent这一步。

查了下,发现是因为mtu设置太大


但是由于系统的网络是NetworkManager管理的,如果需要自动设置mtu,connection的配置中并没有vpn对应的mtu设置。

后来,看了有人使用dispatcher脚本来设置:

创建/etc/NetworkManager/dispatcher.d/vpn-up文件,内容如下

1
2
3
4
5
#!/bin/sh

if [ "$2" = "vpn-up" ]; then
ip link set "$1" mtu 1350
fi

然后vpn连接的时候,就会自动设置mtu了。

阅读更多

Fedora上完美的使用QQ

目前看下来,Linux使用QQ还是Deepin比较好。 CrossOver上的QQ目前不能记住密码,其他还好,比如聊天啥的也是可以的。 Deepin的QQ是目前最好的解决方案。 安装如下:

  • 首先,从百度网盘下载crossover-15_15.0.3-1_all-free.deb 。解压其中的opt/cxoffice/ 到/opt/cxoffice/
  • 其次,从镜像站点下载Deepin的QQ,apps.com.qq.im_8.1.17255deepin11_i386.deb
  • 解压apps.com.qq.im_8.1.17255deepin11_i386.deb 中的opt/cxoffice/support/apps.com.qq.im 到/opt/cxoffice/support/apps.com.qq.im
  • 然后执行/opt/cxoffice/bin/crossover
  • 在CrossOver点击QQ启动即可。
阅读更多

Fedora KDE 25下安装fcitx输入法

首先,安装fcitx之后,只要是接受了GTK_IM_MODULE 、QT_IM_MODULE 、XMODIFIERS 环境变量的程序,都可以使用fcitx输入法了。 但是,即使我在~/.xprofile 里面写了这三个export语句,程序也没法读到这三个环境变量。 后来发现,这里面有两个坑:

  1. Fedora KDE的display manager换成了SDDM,而在SDDM的配置文件中,默认不会执行~/.xprofile 里面的语句。

  2. SDDM问题解决后,发现fcitx依赖的imsettings,会设置这三个变量,所以在~/.xprofile 里面export的变量,其实会被imsettings覆盖。

阅读更多

安装 PHP 7

PHP 7 正式发布了好久了,现在就总结下如何在各个系统上安装 PHP 7。(本文在很大程度上参考了 Installing PHP 7.0.0

Ubuntu系列

PHP 7 可以直接使用 PPA for PHP (5.6, 7.0) : Ondřej Surý:(原来这个PPA中的fpm不能正常工作,后来发现已经改掉了)

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.0

Debian系列

PHP 7 可以通过 Dotdeb repository 来安装: 创建文件 /etc/apt/sources.list.d/dotdev.list ,内容为如下两行:(其中的 <distribution> 根据需要替换为 squeeze, wheezy 或者 jessie):

deb http://packages.dotdeb.org all
deb-src http://packages.dotdeb.org all

添加GPG key :

wget https://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg

安装 PHP 7 :

阅读更多

git lg 和 git tg

不好意思,在下又要开始聒噪几句了。

git lg —— 更人性化地展示git历史

首先,git log默认太挫了,仅仅是罗列一个个commit,我们可以对其进行定制。 我觉得git log的--graph –oneline –decorate 就工作得不错,就把git log –graph –oneline –decorate 设置为别名lg:

git config –global alias.lg ‘log –graph –oneline –decorete’

虽然可以自定义log展示的格式,但是懒得搞…… UPDATE: 翻了下oh-my-zsh,抄过来一句:

git config –global alias.lg “log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ar) <%an>%Creset’ –abbrev-commit”

git tg —— 按版本号排序,显示近几个tag

其次,每次打tag的时候都需要git tag | sort -V 一下,而且还冲掉很多之前的命令和输出。所以要定制一个tg命令来按版本号排序输出最近几次tag。 虽然git有一个设置tag.sort 可以制定按版本号排序,但是仍然会显示所有的tag,这显然不太好。 所以还是得定制别名:

git config –global alias.tg ‘!git tag –sort=version:refname | tail -n 5’

由于我们用到了管道,所以必须在tg这个alias前加感叹号,让git知道这个alias是一个shell命令,而不是git的子命令。

阅读更多