标签: Linux

Ubuntu 18.04/20.04 生产力配置及优化美化

〇、首先,将软件源更换为国内源(可跳过),安装升级速度更快。

左下打开软件列表搜索并打开Softwares & Updates, 在Ubuntu Software -> Download from -> Other -> China中选择合适的镜像站就可以了,推荐阿里云(mirrors.aliyun.com)镜像。
然后更新一下,

sudo apt update && sudo apt upgrade -y

一、基础软件安装

WPS Office 2019

首先,卸载libreoffice

sudo apt remove libreoffice-common

官网下载WPS office 2019 for Linux

sudo dpkg -i wps-office_11.1.0.8372_amd64.deb

如果缺失字体,需要下载wps_symbol_fonts.7z,解压后:

sudo mv wps_symbol_fonts /usr/share/fonts/

中文输入法

安装搜狗输入法,从官网下载最新的安装包,

sudo dpkg -i sogoupinyin_2.4.0.3469_amd64.deb
sudo apt install -f

从设置找到语言->管理安装语言,待更新安装完成,设置为fcitx
重新登入,在右上角的托盘->配置,添加搜狗输入法

PDF阅读器

福昕阅读器下载.run格式的安装包,直接运行安装(如果没有执行权限,sudo chmod +x xxxxxxxxxxxxx.run)。

网易云音乐

目前官网1.1.0版本的安装包有点问题,安装后可以使用sudo运行起来。
或者第三方打包
从网上能找到的最完美的解决方案是使用重新打包过的安装包(传送门),安装完成后,删除~/.cache/netcase-cloud-music一次,应该是该文件夹访问权限的原因,之后就可以正常使用了。
官网更新了18.04的1.2.1版本,下载直接安装即可。

Chrome

官网下载安装即可,有可能要翻墙。

视频播放器VLC

sudo apt install vlc

安装zsh(也可以安装fish)

sudo apt install zsh
# 切换到zsh
chsh -s /bin/zsh 

安装Oh-my-zsh

sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

安装插件highlight,高亮语法

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

在Oh-my-zsh的配置文件中~/.zshrc中添加插件

plugins=(git z extract zsh-syntax-highlighting zsh-autosuggestions)

最后使配置生效

source ~/.zshrc

这里需要重新登入一下,否则zsh只会在当前终端中应用。

QQ/TIM

QQ官方发布了Linux版本,古董界面丑的很,也难用的很。推荐10.3的安装方法。

Wine QQ/TIM

其次,使用wine安装qq,推荐以下两个教程,但都有不同程度的问题,如果可以忍受可以使用:

  • https://phpcj.org/wineqq/
  • https://github.com/askme765cs/Wine-QQ-TIM

    使用deepin-wine 安装

    这个暂时应该是比较完美的安装方法了
    项目地址deepin-wine-for-ubuntu,这个项目最近没有维护,不过安装方法是一样的,有人发帖更新了安装脚本。

    启用“Minimize on Click”

    gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize'

二、gnome shell 扩展

Ubuntu Software => Add-ons => Shell extensions中安装(或直接在Ubuntu Software主界面直接搜索)。

  1. NetSpeed
    监控并显示实时网速。
  2. Coverflow Alt-Tab
    优化Alt-Tab,帅!
    三 美化
  3. Terminal
    在终端中右键->preferences中,禁止菜单,禁止滚动条,以及在配色中
  4. 主题
    首先安装 tweaks,使用该软件统一管理主题中的各个部分

    sudo apt install gnome-tweak-tool 

    而具体的主题等可以在gnome-look.org找到,非常多,下面选择几个我觉得好看的设置。

  5. Shell
    如果Shell显示不可修改,

    sudo apt install gnome-shell-extensions

    重新登入一下,然后在Tweaks->Extensions中将User themes打开,重启tweacks在Apperance -> Themes -> Shell选择,我直接选择使用Vimix主题。

  6. 合并Top bar & Dock
    将桌面打造成Windows风格,
    安装插件,并在TWeaks->extensions中打开

    sudo apt install gnome-shell-extension-dash-to-panel

    重新登入,打开该插件的设置,进行细微处的调节。

    三、针对双系统

  7. 双系统造成的windows时间错误
    先在ubuntu下更新一下时间,确保时间无误:

    sudo apt install ntpdate
    sudo ntpdate time.windows.com

    然后将时间更新到硬件上

    sudo hwclock --localtime --systohc

    方法2
    http://ubuntuhandbook.org/index.php/2016/05/time-differences-ubuntu-1604-windows-10/

  8. rEFInd 引导双系统
    如果你的电脑支持UEFI启动引导又嫌弃默认的启动界面丑,你可以使用rEFInd来管理你的启动项,推荐一个主题Minimal. 引导设置可参考rEFInd引导Win10+Ubuntu14双系统.
  9. 隐藏grub引导菜单
    如果使用了其他引导,可以隐藏ubuntu的grub引导菜单:

    sudo vim /etc/default/grub

    修改内容为

    GRUB_DEFAULT=0
    GRUB_HIDDEN_TIMEOUT=0
    GRUB_HIDDEN_TIMEOUT_QUIET=true
    GRUB_TIMEOUT=0
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""
    GRUB_DISABLE_OS_PROBER=true

    更新grub

    sudo update-grub

Ubuntu20.04使用ZeroTier搭建Moon服务器以及在OpenWRT上的应用

服务器安装Zerotier

公网服务器,需要有固定IP,一条命令安装Zerotier:

curl -s https://install.zerotier.com/ | sudo bash

出现如下提示则代表安装完成:

*** Enabling and starting ZeroTier service...
Synchronizing state of zerotier-one.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable zerotier-one

*** Waiting for identity generation...

*** Success! You are ZeroTier address [ 515xxxxxxx ].

生成Moon配置文件

cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public > moon.json
# 然后编辑该配置文件
sudo nano moon.json

默认该配置文件是如下内容:

{
 "id": "515xxxxxxx",
 "objtype": "world",
 "roots": [
  {
   "identity": "515xxxxxxx:0:e4d8xxxxxx11d962bb14771fa1e9bf1e10f9519c82590c372abbad4c6b2b473f27c389f6f7c8c328d513ce449xxxxxxe4956a318af32e16df>
   "stableEndpoints": []
  }
 ],
 "signingKey": "54685533b0ef4fc66f92e6a010dc304c4531acdd68a4486d800436d42aabfc5a9eed745cb9b7a3fe0983f521adc672f5b153bed420782d431c35058e3110c3>
 "signingKey_SECRET": "3325fd28ec1ec8ae058c255825bc3259d1935bf4bb2b23e361eefec5729337e0f196caba311ba42245f2b77d707f04f5ed33c81b8bf74d31189524c>
 "updatesMustBeSignedBy": "54685533b0ef4fc66f92e6a010dc304c4531acdd68a4486d800436d42aabfc5a9eed745cb9b7a3fe0983f521adc672f5b153bed420782d431c3>
 "worldType": "moon"
}

其中"id"是本机器在zerotier中的id,此处默认无需修改
"stableEndpoints"需要填写服务器的公网IP(假设此处我们的服务器公网IP为114.114.114.114,默认9993端口, 且是UDP协议的, 此处在防火墙上需要开放UDP,否则其他设备连接不上Moon
"stableEndpoints": ["114.114.114.114/9993"]
仅需修改这一条后保存退出。

生成签名文件

sudo zerotier-idtool genmoon moon.json

运行后提示类似wrote 000000515xxxxxxx.moon (signed world with timestamp 1640010832xxxx)表示签名完成。文件名去掉开头的00000就是机器的ID

将 moon 节点加入网络

在/var/lib/zerotier-one中新建一个moons.d的目录,我们默认目前依旧在/var/lib/zerotier-one目录下,然后将刚才签名好的moon文件移动道moons.d中

sudo mkdir moons.d
sudo mv 000000515xxxxxxx.moon moons.d

重启zerotier服务以应用配置

sudo service zerotier-one restart 

此时,Moon服务器已经配置完成、正常运行,并且可以接受客户端的连接请求了
下一步准备配置客户端,首先通过SFTP或者其他方式,将刚刚生成的000000515xxxxxxx.moon下载到本地。

配置OpenWRT软路由

我们前提默认OpenWRT已经安装了Zerotier并且已经配置完毕
ssh登录OpenWRT后,在zerotier的目录下创建moons.d目录

mkdir /etc/config/zero/moons.d

加入MOON服务器方式一(推荐)

通过SFTP将moon服务器中的000000515xxxxxxx.moon文件上传到刚刚创建的moons.d目录中

加入MOON服务器方式二

如果不方便上传文件,那么可以简单通过命令加入:

zerotier-cli orbit 515xxxxxxx 515xxxxxxx

后面两串数字是MOON服务器的ID,两个的原因是orbit参数支持同时连接两台MOON服务器(同样,通过moon签名文件的方式也可以连接多个MOON服务器),本文中我们仅配置了一台MOON服务器,因此两个ID相同即可。
重启软路由,输入zerotier-cli listpeers以检查zerotier目前已经连接的节点是否包含我们刚刚配置好的moon服务器。
如果不出意外,反馈的应该是这样的:

200 listpeers <ztaddr> <path> <latency> <version> <role>
200 listpeers 296cxxxx17 192.168.2.191/29994;12457;5030 21 1.8.3 LEAF
200 listpeers 515xxxxxxx 114.114.114.114/9993;2347;2073 27 1.8.4 MOON
200 listpeers 61dxxxxx89 - -1 1.4.6 LEAF
200 listpeers 61dxxxxxcb 50.7.73.34/9993;2347;1448 905 - PLANET
200 listpeers 62fxxxxx71 50.7.252.138/9993;2347;1078 1266 - PLANET
200 listpeers 778xxxxx90 103.195.103.66/9993;2347;2050 285 - PLANET
200 listpeers 992xxxxxb7 195.181.173.159/9993;2347;2066 279 - PLANET

其中role列为MOON的那一条如果显示出IP与版本号,说明已经成功连接了。latency为MOON服务器的延迟。MOON为用户自建节点服务器,PLANET为官方节点服务器,LEAF为客户端。

疑问:MOON服务器本身,是否需要加入我们自己组建的Zerotier局域网呢?
答案:不需要且不能加入。因为加入之后,这台服务器就的角色就变成了LEAF。


Ubuntu20.04 下编译安装ffmpeg

安装编译必须的包

sudo apt install build-essential pkg-config checkinstall git cmake yasm nasm 

安装依赖库

sudo apt install libfaac-dev libjack-jackd2-dev libgmp3-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html zlib1g-dev  libx265-dev libx264-dev libspeex-dev libfdk-aac-dev libnuma-dev  gnutls-bin libaom-dev libass-dev libbluray-dev libopenmpt-dev libopus-dev libshine-dev libsnappy-dev libsoxr-dev libtwolame-dev libvo-amrwbenc-dev libvpx-dev libwavpack-dev libwebp-dev liblzma-dev

安装SDL2

SDL是编译 ffplayer 所必须的外部库,而 Ubuntu 环境并不会对其默认安装,故而需要用户手动安装。而 SDL1 有些过时,目前使用广泛的是 SDL2,因此这里推荐安装SDL2。
SDL 下载地址:

http://www.libsdl.org/download-2.0.php

下载后,同样解压,然后进入目录

./configure --prefix=/usr/local
sudo make
sudo make install

git编译安装ffmpeg

从gitee网站上clone ffmpeg 国内的网站速度会快很多

git clone https://gitee.com/mirrors/ffmpeg.git
cd ffmpeg
#切换到4.4 分支 可以切换到任何自己想要的分支上
git checkout release/4.4
cd ffmpeg

配置自己需要哪些库

./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-iconv --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-lzma --enable-zlib --enable-gmp --enable-libvorbis --enable-libvo-amrwbenc --enable-libspeex --enable-libxvid --enable-libaom --enable-libopenmpt --enable-libfdk-aac --enable-nonfree --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --cc=gcc --host-cflags= --host-ldflags=

开始make

make
# 安装 安装位置为上面 --prefix= 后面的目录 可以随意更改 
sudo make install

手动指定ffmpeg自带的组件的库

cd /etc/ld.so.conf.d/
sudo touch ffmpeg.conf
sudo nano ffmpeg.conf

在文件中写入你的ffmpeg lib的位置 本文中的是/usr/local/ffmpeg/lib

/usr/local/ffmpeg/lib
sudo ldconfig

配置环境变量

将 FFmpeg 添加至环境变量:

sudo nano ~/.bashrc

将光标调至文件末尾
添加如下内容:

export PATH=$PATH:/usr/local/ffmpeg/bin

保存文件


Ubuntu搭建Nginx+Mysql+Flask+uWSGI

Ubuntu 20.04 64 Bit
Python 3.8.2
第一件事当然是更新一下

sudo apt update
sudo apt upgrade

安装并设置宝塔面板

为了部署和配置方便,我们这里直接安装宝塔面板。

wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

登录宝塔面板后,编译安装LNMP:
Nginx+ MySQL+ PureFtpd
(如果站点纯粹使用python则无需安装php和phpmyadmin)

部署flask+uWSGI环境

先安装依赖

sudo apt-get install build-essential python3-dev libssl-dev libffi-dev
sudo apt-get install python3-pip
sudo pip3 install uwsgi flask pymysql

在宝塔上部署网站

我们先在宝塔上新建一个站点,FPT和MYSQL一起新建也可以,假定域名为example.com,目录为yoursite。假定去阿里云申请免费证书,并下载适用于nginx的证书文件,并将证书文件yoursert.pem和yoursite.key放置于目录yoursite下

Nginx配置:

server {
    listen 80;
    server_name example.com www.example.com;              #此处填写域名管理选项卡中绑定的域名,多个域名用空格隔开
    rewrite ^(.*) https://$server_name$1 permanent;
}
server
{
    # ssl证书使用443
      listen 443 ssl;
    server_name example.com www.example.com ;              #此处填写域名管理选项卡中绑定的域名,多个域名用空格隔开
    charset utf-8;
    # 证书.pem的存放地址
      ssl_certificate /www/wwwroot/yoursite/yourcert.pem;
      # 证书.key的存放地址
      ssl_certificate_key /www/wwwroot/yoursite/yourcert.key;
      ssl_session_timeout 5m;
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_prefer_server_ciphers on;
      error_page 497 https://$host:$server_port$uri$is_args$args;
    location / {
        include uwsgi_params;                       # 导入uwsgi配置 
        uwsgi_pass 127.0.0.1:5555;                  # 转发端口,需要和uwsgi配置当中的监听端口一致
        uwsgi_param UWSGI_PYTHON /usr/bin/python3;  # Python解释器所在的路径,如果有虚拟环境可将路径设置为虚拟环境
        uwsgi_param UWSGI_CHDIR /www/wwwroot/yoursite;         # 项目根目录
        uwsgi_param UWSGI_SCRIPT run:app;           # 项目的主程序,比如你整站用run.py文件来响应客户端请求,文件中app = Flask(__name__),那么这里就填run:app 
    }
}

这样设定好以后网站默认是开启SSL的,SSL监听的是443端口,需要在宝塔的安全面板中,在防火墙设置里放行443,否则网站将无法访问。

UWSGI配置:

在网站根目录新建一个uwsgi.ini,内容如下:

[uwsgi]
# uWSGI 的监听端口
socket          = 127.0.0.1:5555
# 项目根目录
chdir           = /www/wwwroot/yoursite
# Flask 项目的启动文件
wsgi-file       = run.py
# 程序内启用的application变量名
callable        = app 
# 进程数量
processes       = 4
vacuum          = true
master          = true
# py文件更新后自动重启
py-autoreload   = 1
# 设置stats文件和pidfile位置
stats           = %(chdir)/uwsgi.status
pidfile         = %(chdir)/uwsgi.pid
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
daemonize       = %(chdir)/uwsgi.log

启动uWSGI服务:

uwsgi --ini /www/wwwroot/yoursite/uwsgi.ini &

这时候可以测试一下网站是否能够访问。如果出现500错误或者Bad Gateway,可以cat /www/wwwroot/yoursite/uwsgi.log查看一下uWSGI的日志

设置uwsgi自启动服务

在 Ubuntu 上使用 Nginx+ uWSGI 部署Flask项目,在实际生成环境中需要系统自动启动这两项服务,Ubuntu默认自启动Nginx,需要对uwsgi设置为系统自启动。

Ubuntu20.04采用systemctl来管理开机启动的脚本,对于uwsgi服务要设置成系统服务来进行自启动。

创建uwsgi.service文件

sudo nano /etc/systemd/system/uwsgi.service

代码如下:

[Unit]
Description=uWSGI server
After=syslog.target 
[Service]
#用户名
User=www
#用户组
Group=www
#项目目录
WorkingDirectory=/www/wwwroot/yoursite
#服务启动的代码(可以用which uwsgi查看uwsgi安装位置)
ExecStart=/usr/local/bin/uwsgi --ini /www/wwwroot/yoursite/uwsgi.ini
#服务停止代码
ExecStop=/usr/local/bin/uwsgi --stop /www/wwwroot/yoursite/uwsgi.pid
#这种方式可以让你用nohup起动服务
Type=oneshot
#表示虽然nohup后台运行了,也认为这个服务是起来的
RemainAfterExit=yes

[Install]
#指明会跟随系统启动而启动该服务 
WantedBy=multi-user.target

启动、停止、重启、查看服务命令 :

sudo systemctl start uwsgi
sudo systemctl stop uwsgi
sudo systemctl restart uwsgi
sudo systemctl status uwsgi

加入、关闭系统自启动:

sudo systemctl daemon-reload
#执行enable命令后在/etc/systemd/system/multi-user.target.wants目录下生成uwsgi.sevice的链接文件 
sudo systemctl enable uwsgi
sudo systemctl disable uwsgi

How to move Plex metadata and index data to new drive/partition and/or directory location

The most recent versions of the Plex Media Server has the option to auto index, depending on your library size, this can take up a lot of space, and in some instances you may need to have this saved in a different location. You may also have a very large media collection, and the metadata could be very large in size too. Well, I recently had this issue and between metadata and index data I had almost 55GB of a 64GB Solid State Drive used just for Plex metadata and index data! Here’s how I moved all of that data to a new location and did it without making any changes to the configuration…

Update 3/3/2014: Check the comments below for additional methods to change the directory, but the easiest will be modifying the /etc/default/plexmediaserver file and specifying the location.

Just to note, my current setup is using OMV (Open Media Vault) that runs Debian, but this should be the same for almost any version of linux, including Ubuntu, etc. The very simple approach I took to make this change was by using a symlink, and a few other small changes.

Stop Plex

First thing you will need to do is to stop Plex Media Server

sudo service plexmediaserver stop

Make sure all Plex services are killed

Next run this command to make sure all Plex services are killed and no longer running

killall -u plex

Copy Metadata and Index Data to new location

Now copy all of the current meta and index data to the new location, this may take a while depending on the size. This is assuming that Plex data is stored at “/var/lib/plexmediaserver/Library/Application Support” which is the default for Debian based Plex Media Server installs. This command below should copy the Application Support directory to the /new/dir/to/plex, ultimately making it “/new/dir/to/plex/Application Support”

cp -rf '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server' '/data/DataCenter/Plex Media Server'

Move old directory to .OLD in case of issues

Now we will move the old directory to .OLD in case we need to restore it if there are any issues

sudo mv '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server' '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server.OLD'

Create symbolic link to new directory

Next we will create a symbolic link to the new location for our meta and index data

sudo ln -s '/data/DataCenter/Plex Media Server' '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server'

Change owner of new location to Plex

We now have to update the permissions and change the owner to Plex otherwise there will be issues

sudo chown -R plex.plex '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server'
sudo chown -R plex.plex '/data/DataCenter/Plex Media Server' 

Start Plex Media Server

Next we will start Plex Media Server to make sure everything worked correctly. After issuing the command below, login to Plex via http://ipofserver:32400/manage and make sure everything is still the same and working correctly.

sudo service plexmediaserver start

Remove old Meta and Index Data files

As long as everything works correctly, you can now remove the old directory we renamed in case of any issues.

sudo rm -rf '/var/lib/plexmediaserver/Library/Application Support.OLD'

Voila, you have now moved your Meta and Index data to a new location