标签 Debian 下的文章

商店中的OBS版本实在不敢恭维…尤其到了15.7以后,推流总会闪退。遂想到来自己编译最新版本的OBS。而本着服务大众的理念,便将其打包成Appimage格式,便于传播的同时还可以避免各种依赖的问题。

一、编译安装OBS

OBS是开源软件,所以可以方便的从官方网站获取源码进行编译安装。

  1. 使用命令  sudo apt install build-essential pkg-config cmake git-core checkinstall 完成编译环境的搭建
  2. 使用
sudo apt install libx11-dev libgl1-mesa-dev libvlc-dev libpulse-dev libxcomposite-dev libxinerama-dev libv4l-dev libudev-dev libfreetype6-dev libfontconfig-dev qtbase5-dev libqt5x11extras5-dev libx264-dev libxcb-xinerama0-dev libxcb-shm0-dev libjack-jackd2-dev libcurl4-openssl-dev luajit-5.1-dev swig python3.6-dev libluajit-5.1-dev python3-dev ffmpeg 

安装依赖包

  1. 安装aac依赖: sudo apt-get install libavcodec-dev libavfilter-dev libavdevice-dev libfdk-aac-dev
  2. 编译安装OBS。下列命令依次执行(首先安装好git和cmake命令):
   git clone --recursive https://github.com/obsproject/obs-studio.git 
   cd obs-studio
   mkdir build && cd build
   cmake -DUNIX_STRUCTURE=1 -DCMAKE_INSTALL_PREFIX=/usr ..
   make -j4
   sudo checkinstall --pkgname=obs-studio --fstrans=no --backup=no --pkgversion="$(date +%Y%m%d)-git" --deldoc=yes

编译安装完成,同时,在 obs-studio/build 下面可以找到一个deb格式的安装包。如果没有更新需要,保留这个安装包,以后就可以直接安装了(需要安装依赖)。

二、打包成appimage格式

诚如前面所讲,现在拥有的deb还是需要各种依赖才能正常安装运行的。如果为了携带或者便于传播,可以将当前版本打包成appimage格式的包。这样,通过一个文件便能在几乎所有Debian系的Linux上面运行了(不敢说RHEL系也能用,但是至少Debian系足够了)

  1. 前往 https://github.com/AppImage/AppImages ,点击文件列表右上绿色的Clone or Download按钮,弹出气泡选择Download ZIP,获得脚本
  2. 将下载得到的ZIP文件整体解压出来,得到一个名为 AppImages-master 的文件夹
  3. 将前面编译得到的deb文件复制进这个文件夹
  4. 在这个文件夹中打开终端,使用命令 bash -ex ./pkg2appimage recipes/OBS-Studio.yml 完成appimage的打包(过程较长,耐心等待)
  5. 完成。现在可以在 AppImages-master/out 下面找到刚刚打包好的appimage版本OBS了。

至此,新版本的OBS安装包制作完成。推流、录像都不再有问题了,美滋滋

一直使用shadowsocks-qt5做ss客户端,之前在DDE下面也能方便的设置全局代理,但是到了KDE下,它的代理设置方法就没有那么方便了。所以在其他桌面下,一般在终端使用ss更好一些。但是这样一来,就没有一个图形界面可以使用了。而在网上能搜索到教程又少,好不容易找到qt5的又不成功,所以只能自己摸索了。不过还好,经过一番实验,终于在KDE下把qt5整成全局代理了,遂记录在此。

一、生成一份pac文件

这个的用处很明显,只代理不可访问的地址,以确保可访问的不绕路,不可访问的可联通。

  • 安装pip(如果系统未安装,需安装)
sudo apt-get install python-pip python-dev build-essential
sudo pip install --upgrade pip
sudo pip install --upgrade virtualenv
  • 安装Genepac以自动生成pac文件

sudo pip install genpac

  • 选择一个存放pac文件的文件夹,并生成

genpac --proxy="SOCKS5 127.0.0.1:1080" --gfwlist-proxy="SOCKS5 127.0.0.1:1080" -o 输出文件地址 --gfwlist-url="https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt"

pac文件就成功创建了。

二、KDE下设置代理

假设已经安装了shadowsocks-qt5且已经启动。现在只需要将其与全局代理和pac文件关联起来就完成了。

打开KDE的系统设置,切换到网络—设置—代理。

在“配置所用的代理服务器”窗口中,选择“使用手动配置的代理服务器”。

在弹出的表单中将“SOCK5代理”处添上 127.0.0.1,后面的“端口”填1080,“例外”处填写刚刚生成的pac文件位置,file:///开头(是三个斜线,如file:///home/kevin/proxy.pac)。

最后,勾选“只为排除列表中的地址使用代理服务器”,确认。

全局代理就设置好了。

得益于Linux较为缺陷的驱动程序们,Linux是比较费电的。这集中表现在电池的使用时间会明显短于Windows下面使用。但是借助一些电源管理软件,我们可以最大限度的提升Linux在电池情况下面使用的时长,甚至在相同工作量下面超过Windows。

比较好用的软件就是TLP。TLP提供优秀的Linux高级电源管理功能,不需要了解所有技术细节。默认配置已经对电池使用时间进行了优化,只要安装即可享受更长的使用时间。但如果想最大限度的优化电量损耗,还是需要自行进行配置。

在tlp更新到1.3后,配置文件结构有较大改动。下文会将新增/变更部分加粗表示,删除部分则直接加上删除线以区分。

一、相关软件包

一定需要安装的:tlp

无线设备控制:tlp-rdw

硬盘降速:smartmontools

CPU高级节能:x86_energy_perf_policy

网络唤醒更改:ethtool

对ThinkPad的电源优化:tp_smapi(充电阈值与电池校准)、acpi_call(Sandy Bridge及更新型号上面的充电阈值与电池校准)

二、服务调整

通过命令systemctl enable tlp(tlp-sleep服务已被移除)来启动TLP服务,并通过命令systemctl mask systemd-rfkill.servicesystemctl mask systemd-rfkill.socket来屏蔽systemd的rfkill服务及套接字以防止冲突,保证TLP无线设备的开关选项可以正确运行。

如果安装了tlp-rdw以便控制无线设备节能,则需通过systemctl enable NetworkManager-dispatcher启用此服务,并通过命令systemctl mask systemd-rfkill.servicesystemctl mask systemd-rfkill.socket来屏蔽systemd的rfkill服务及套接字以防止冲突,保证TLP无线设备的开关选项可以正确运行。

一般情况下都使用NetworkManager作为网络管理器。如果使用其他的,请编辑 /etc/systemd/system/multi-user.target.wants/tlp.service ,将 After=multi-user.target bluetooth.service NetworkManager.service 一行的 NetworkManager.service 去掉以避免错误。

现在,注销重新登录一下,默认配置的TLP就已经启动了。此时电脑消耗的电量应该比之前少了一些。但如果想要做到最大程度的节能,需要自行编辑一下TLP的配置文件。

三、配置文件的几个主要配置

用root权限的文本编辑器打开 /etc/default/tlp ,这是TLP的配置文件。

配置方式在1.3后变更较大。用户既可以修改/etc/tlp.conf,亦可以在/etc/tlp.d下以设置项=值的配置文件形式实现更改。该文件夹遵循下述规则:

  • 加载顺序受文件名最开始的数字影响,越大的数加载越晚,越能覆盖前面的设置
  • 00-template.conf为示例,用户自定义时亦需参考这个文件的命名方法和书写方式
  • 如果/etc/tlp.d下有些设置与/etc/tlp.conf冲突,则遵循tlp.d下的设置

推荐直接修改/etc/tlp.conf,因为这个文件的配置方法与以前的版本相同。下面的内容全部针对此文件。

每一项都是什么作用已经通过注释标记在这个文件中了。你可以根据自己的需要对相应的位置进行修改。但经过我自己的探索,给出几个自己最好改一改的位置。

1、TLP_DEFAULT_MODE

这一项记录了TLP启动时默认的模式。改成BAT可默认以电池供电方式启动,达到节省电量的目的。

2、TLP_PERSISTENT_DEFAULT

配合TLP_DEFAULT_MODE的修改,此处改成0以保证在连接电源线时电脑会以非节点模式运作以达到最高性能,而当改成电池供电,TLP自动将状态修改为节点模式以节约电量。

3、CPU_HWP_ON_AC和CPU_HWP_ON_BAT

使用Intel Skylake架构或更新的CPU并且Linux内核版本 >= 4.10可启用该配置。这两项分别对应通过电源连接和通过电池供电时候CPU的运作模式。可选performance, balance_performance, default, balance_power, power,依次为最高性能、优先考虑性能、默认、优先考虑节能、最大节能。

可以设置为CPU_HWP_ON_AC=balance_performance和CPU_HWP_ON_BAT=power可以保证电源供电时候偏好性能而电池供电时最大节能。

至于Skylake架构以前或Linux内核版本低于4.10时该配置失效,可忽略该项而将CPU_SCALING_GOVERNOR_ON_AC和CPU_SCALING_GOVERNOR_ON_BAT两项进行修改(如果有注释符则取消注释)。

对于酷睿i系列,可选项powersave和performance(推荐前者);其他型号可选项ondemand, powersave, performance, conservative, schedutil(推荐ondemand)

4、ENERGY_PERF_POLICY_ON_AC=performance和ENERGY_PERF_POLICY_ON_BAT=power

CPU相对节能策略。可选项performance, balance-performance, default, balance-power, power

5、DISK_DEVICES

该项关乎到之后的磁盘节能策略涉及到的磁盘。默认只有sda和sdb两块磁盘。如果你有更多的磁盘,请都加到引号内,通过空格分隔。磁盘label可以通过命令fdisk -l获得

如果此处修改了磁盘的数量,那么所有关于磁盘的设置项都需要对应的修改。如:

6、DISK_APM_LEVEL

这个设置意在调整硬盘在空闲时间节电,必要时候可以将低转速来实现。这里同样对应着AC和BAT。可以把AC设置成默认,即写为keep。注意,有几块磁盘写几个配置,中间通过空格分隔。如我有三块磁盘,DISK_DEVICES改为了"sda sdb sdc",则此处对应修改为"keep keep keep"

至于BAT一项,可以设置节电等级。其中1~127的节电等级可能会使硬盘降速,128~255则不会改变。因此对于SSD,设置128以上即可,HDD则可以设置成120左右的数字来兼顾唤醒延迟和降速节电。同样需要注意,在DISK_DEVICES写了几块硬盘,这里将要写几个参数。如我的三块硬盘,此处写成了"128 128 120"

7、SATA_LINKPWR

磁盘ALPM节电选项。同样对应着AC和BAT。

可选项min_power, med_power_with_dipm, medium_power, max_performance。其中,med_power_with_dipm需要4.15及以上版本的内核支持。

与6同理,有几块硬盘写几个配置,通过空格分开。如我的三块硬盘:

`SATA_LINKPWR_ON_AC="max_performance max_performance med_power_with_dipm"
SATA_LINKPWR_ON_BAT="min_power min_power min_power"`

8、RUNTIME_PM_BLACKLIST

如果使用bumblebee来控制英伟达显卡,那么把这一项的注释取消掉,然后在后面的引号中输入英伟达显卡的硬件地址以使Bumblebee控制GPU的电源。

获取硬件地址可以通过命令 lspci 来查看。一般情况下是 01:00.0

更多的设定还望自行阅读说明进行调整。如此设定之后,Linux在电池供电时,使用时间应该可以明显的提升了。

达芬奇是一款全平台支持的调色软件。现在加入了剪辑功能,再加上Fusion的助力,可以把这个软件当做一个强大的后期聚合软件来使用。但是官方对于Linux支持的定义只包括了CentOS,对于Debian系的说明并不明确。所以在尝试之后特地来记录一下其在Deepin(基于Debian sid)上面的安装过程

一、获取DaVinci Resolve

前往 https://www.blackmagicdesign.com/cn/products/davinciresolve/ 获取安装文件(.zip)。免费用户可以使用DaVinci Resolve,感觉对个人来说够用了。在点击下载之后填写一个表格即可得到链接。

二、补全依赖

DaVinci的依赖比较复杂。因此在安装之前请先调整好自己系统的依赖关系以满足DaVinci安装程序和运行的需要。

注:网络上有脚本可以把DaVinci的安装程序转换为.deb,安装更方便。最后讲。

需要事先安装的依赖命令如下:

sudo apt install libssl1.0.0 ocl-icd-opencl-dev

官方推荐安装NVIDIA的闭源驱动。因此对于核显以及AMD显卡的用户,可能会有不可预料的错误发生。

对于安装有NVIDIA闭源驱动的用户(bumblebee方案亦可),再追加以下命令:

sudo apt install nvidia-cuda-dev nvidia-opencl-icd

至此,依赖安装完毕。

三、安装DaVinci Resolve

将下载好的zip解压缩,得到一个.run文件。

在终端中通过 ./*.run 来运行得到的run文件(*对应解压出来的run文件名),一步步安装即可。

安装完成,如果是bumblebee用户,请通过optirun命令来启动。它的启动命令为

optirun /opt/resolve/bin/resolve

一般来讲,应该可以运行成功了。如果出现没有窗口打开的情况,请通过如下步骤检查:

  • 通过终端运行DaVinci (终端命令 /opt/resolve/bin/resolve ) 检查输出的错误信息
  • 确保所有的依赖都已安装。 运行 ldd /opt/resolve/bin/resolve 来查看是否有缺失的库文件 (对于找不到的依赖,ldd应该会在对应行显示空白对应关系)
  • 查看日志文件。位置在 /opt/resolve/logs/ ,有两个需要关注: ResolveDebug.txt rollinglog.txt
  • 确保CUDA和OpenCL安装成功,并且可以正常载入。即使使用CUDA,同样需要一个正常的OpenCL功能。
  • 如果在启动时便发生 Segmentation fault ,一般情况意味着缺失GPU驱动,或使用了不支持的GPU驱动程序或硬件。具体请查看 /opt/resolve/logs/

将.run编辑成.deb安装包进行安装

这很大程度上可以便于补全缺失的依赖 (通过 apt -f install 即可完成)。步骤如下:

  • 去往 https://www.danieltufvesson.com/makeresolvedeb 获取脚本文件。注意这里下载的脚本一定要与自己持有的DaVinci版本相对应。比如现在官网可以获取到15.2.2,则在这里请下载适配15.2.2版本中最新的脚本文件。
  • 补全所需依赖。使用命令 sudo apt install fakeroot xorriso
  • 将得到的 tar.gz 文件解压,文件放到 DaVinci 安装程序(.run文件)相同的文件夹下。这个文件夹一定要在ext4或其他默认权限为755的分区中(NTFS不支持Linux的权限管理,默认为777)
  • 在该文件夹下打开终端,输入 ./"脚本名" lite 完成deb文件的创建

对于Deepin来说,以上是全部过程了。如果在某些步骤中还有缺少依赖的提示,只需通过 sudo apt install 依赖名 补全即可。

由于个人有直播间在使用脚本推流,所以在进行脚本代码的变更时候,如果能现在本地进行一次测试就最好不过了。自己安装配置Nginx等确实可行,但是毕竟只是自己测试使用,大费周章的做一系列工作有点儿麻烦了,所以我最终选择了docker上编译好的rtmp环境直接使用。

一、安装Docker

Docker 官网上并没有提供关于 Deepin 的 Docker 安装教程,由于 Deepin 是基于 Debian 的,所以可以参照官网 Debian的安装教程安装,但 Deepin 在定制过程中进行了大量修改,所以使用官方教程可能会失败,所以需要先在 Deepin 下完成 Docker 的安装。

1、关于深度中的Docker

深度官方 Deepin 的应用仓库已经集成了docker,但不是类似于 docker-ce 这样的最新版本。要想使用最新版可以参考官网 debian 安装教程安装,不过由于深度 sid 版本开发,通过 $(lsb_release -cs) 获取的版本信息为 unstable,而 docker 官方源并没提供 sid 这种 unstable 版本的 docker,所以使用官方教程是安装不成功的。

2、前提—安装 docker-ce 和密钥管理以及下载相关的工具

使用命令

sudo apt-get install apt-transport-https ca-certificates curl python-software-properties software-properties-common

安装 curl命令、提供add-apt-repository工具的software-properties-common包 和密钥管理工具。

3、下载并安装秘钥

通过命令

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

安装。之后可以通过 sudo apt-key fingerprint 0EBFCD88 查看是否安装成功。若成功,会类似下面的信息:

pub 4096R/0EBFCD88 2017-02-22
Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) mailto:[email protected]
sub 4096R/F273FCD8 2017-02-22

4、添加docker官方仓库

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian wheezy stable"

之后使用命令 sudo apt update 来更新系统

5、安装Docker

sudo apt-get install docker-ce

6、验证完成安装

现在,可以通过 systemctl start docker 来启动docker服务,并使用 docker version 来查看docker版本。若能返回版本信息,则安装已完成。

若启动启动服务时报错,可查看 docker.service 的 unit文件,路径为 /lib/systemd/system/docker.service,把 ExecStart=/usr/bin/dockerd -H fd:// 修改为ExecStart=/usr/bin/dockerd,即可以正常启动 docker 。

7、更改docker权限

因为安装过程都是超级用户身份,所以现在可以对权限进行更改,使普通用户可用。

#将当前用户添加到docker组
sudo gpasswd -a ${USER} docker

#修改docker.sock权限
sudo chmod a+rw /var/run/docker.sock

完成。现在可以通过 sudo docker run hello-world 来验证docker是否能正常使用。正常情况下,终端会显示Hello from Docker一系列欢迎界面。

8、使用国内加速源

编辑 /etc/docker/daemon.json 文件,并输入docker-cn 镜像源地址

sudo nano /etc/docker/daemon.json

输入以下内容:

{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

保存。

最后,重启一下docker服务

sudo service docker restart

Docker安装完成,接下来可以安装rtmp环境了。

二、在Docker上获取RTMP环境

1、拉取容器

docker pull alfg/nginx-rtmp

待拉取完毕,RTMP环境便搭建好了。

2、启动RTMP环境并推流

通过命令

docker run -it -p 1935:1935 -p 8080:80 --rm alfg/nginx-rtmp

来运行RTMP环境。之后,便可通过OBS或ffmpeg来向其进行推流了。

推流地址配置如下。

对于OBS:

流类型: 自定义流媒体服务器
URL: rtmp://localhost:1935/stream
流名称: hello(这里可以自定义,只需在拉流时对应更换好即可)

对于ffmpeg,推流地址写成

rtmp://localhost:1935/stream/hello

即可。其中,hello同OBS,可以自定义。

3、通过vlc查看流

在地址处输入 http://localhost:8080/live/hello.m3u8 即可。注意hello更换成前边推流自定义的流名称。

最近出现的问题。在文件管理器里边粘贴、新建、删除文件或文件夹的时候,文件夹内容不会实时变化,需要手动按F5才行。之后通过论坛解决。在这里记录一下

可以先通过命令 sudo sysctl -a | grep fs.inotify.max_user_watches 查看当前设置。默认应该是8192.

现在,通过命令 sudo sysctl -w fs/inotify/max_user_watches="一个数字" 来指定该参数的大小。之后重启即可。

关于这个参数

fs.inotify.max_user_watches:表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)

针对该参数的修改方法,还有一种就是直接修改文件:

/proc/sys/fs/inotify/max_user_watches

但是修改后,Linux系统重启inotify配置max_user_watches可能会因无效被恢复默认值8192。这个该如何解决呢?

很简单,通过 vim /etc/sysctl.conf

在其中添加 fs.inotify.max_user_watches=99999999(你想设置的值) 即可。