小编Ole*_*leg的帖子

如何获得近乎完美的屏幕录制质量?

有人建议我将未经修改的 X 显示的副本定向到一个文件,然后将该文件转换为通用视频文件。我将使用哪些命令在 Kubuntu 系统上执行此操作?(编辑:他说了一些关于将显示端口附加到文件的内容。)如果不可能,对于不依赖于快速硬件的优质屏幕录制,我的最佳选择是什么?

背景:我尝试将 avconv 与 -f x11grab 和一些 GUI 程序一起使用。但是,无论我尝试什么,生成的视频要么有伪影/模糊,要么断断续续(丢失帧)。这可能是由于 CPU/内存限制。

目标:

  • 视频质量不能与直接在屏幕上观看会话有明显不同,因为目的是演示动画应用程序。
  • 最终视频必须采用可发送给 Windows 用户并在网络上使用的通用格式。我认为 H.264 MP4 应该可以工作。
  • 解决方案不应该假设很多先验知识。我熟悉命令行和基本的Linux命令,但我还在学习Linux,对视频编解码器了解不多。

我已经尝试过的:

  • 迄今为止最好的命令:ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avi,然后使用ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • 图像质量很好,但在我的测试系统上它落后于计算机。在更快的目标系统上它不会滞后,但显然会跳过帧,使视频不是很流畅
    • 我仍在尝试弄清楚如何将grab.avi 文件保存到SHM 以查看是否有帮助。
  • 使用伊斯坦布尔和 RecordMyDesktop GUI 记录器
  • 简单命令:avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpg使用 avconv 版本 0.8.3-4:0.8.3-0ubuntu0.12.04.1
  • 添加-codec:copy(失败:Requested output format …

ffmpeg x11 screencasting kubuntu avconv

34
推荐指数
2
解决办法
3万
查看次数

NetworkManager、networkd、netplan、ifupdown2 和 iproute2 究竟是如何交互的?

我正在学习关于Linux的Kubuntu我18.04工作站上的网络,我看到有两个NetworkManagernetworkd-dispatcher正在运行:

oleg@eclectic:~$ sudo ps -ef | grep -i net
root        56     2  0 Oct11 ?        00:00:00 [netns]
root      1097     1  0 Oct11 ?        00:00:02 /usr/sbin/NetworkManager --no-daemon
root      1098     1  0 Oct11 ?        00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1250     1  0 Oct11 ?        00:00:02 /usr/sbin/inetd
root      1593  1097  0 Oct11 ?        00:00:00 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper...
Run Code Online (Sandbox Code Playgroud)

NetworkManager似乎被配置为通过netplan以下方式处理“一切” :

oleg@eclectic:~$ cat /etc/netplan/01-network-manager-all.yaml 
# Let NetworkManager manage all devices on this system
network:
  version: 2 …
Run Code Online (Sandbox Code Playgroud)

networking networkmanager linux-kernel systemd-networkd netplan

30
推荐指数
2
解决办法
2万
查看次数

回滚和回滚缓冲区究竟是什么?

什么是“回滚”,并在节目像“滚动缓冲区”bashscreen,以及它们如何涉及到TTY,正在运行的程序,标准输入/输出/标准错误?

这是迄今为止我发现的“回滚”的唯一定义(在archlinux wiki 中):

回滚是在文本控制台中实现的一项功能,它允许用户返回查看已滚出屏幕的文本行。这是通过在视频适配器和显示设备之间为此目的创建的缓冲区实现的;回滚缓冲区。

但是,这给我带来了更多的问题:

  • 它的意思是“子程序”中的“功能”还是“功能”中的“功能”?
  • 此回滚缓冲区是否有 Unix 标准或 API?
  • 在程序的“堆栈”中,例如在终端模拟器vimscreen启动的bash启动中ssh启动,这些程序中的哪些正在控制回滚缓冲区?

我也用screen,以转储回溯到一个文件中。这个文件的顶部有很多空白,我的终端模拟器显示的“视图”似乎只是缓冲区底部的几行。

  • 这就是为什么像这样的程序vim可以“清除”我的整个终端窗口,因为它可以临时访问父 shell 的回滚缓冲区?
  • 还是vim使用它自己的回滚缓冲区,该缓冲区以某种方式覆盖在父回滚缓冲区之上?

shell terminal buffer tty scrolling

29
推荐指数
1
解决办法
2万
查看次数

如果组不存在,是否有创建组的简短命令?

在 bash 中修改此命令以仅在组不存在时运行的最干净方法是什么?

groupadd somegroupname
Run Code Online (Sandbox Code Playgroud)

最好是单线。

command-line users group

23
推荐指数
2
解决办法
2万
查看次数

所有 ssh 命令的本地、带时间戳的日志记录?

如何保留我使用的所有远程命令的本地时间戳记录ssh(命令行 openssh 客户端通过bash)?

要求:

  • 基本的:

    • 100% 客户端,不依赖服务器日志
    • 按用户配置或安装,日志存储在用户的主目录中。
    • 支持区分与不同用户和主机的多个同时会话。
    • 非侵入性(无需每次都激活,不会显着干扰 ssh 的使用)
  • 高优先级:

    • 尽可能不记录或过滤输出
    • 未记录密码条目或文件已加密
    • 表示实际使用的命令(在 tab/history 完成、退格、CTRL+C等...已处理后)
  • 很高兴有:

    • 还记录链接会话中的命令(在远程sshsu <user>会话期间输入的命令)
    • 应该记录会话开始和结束
    • 一个简单的bash基于非 root 的解决方案是最好的(也许是命令的一个aliasbash包装脚本ssh?)

我的技能水平:

  • 我对编程并不陌生,但仍在学习bash和“Linux 方式”,因此非常感谢带有简要说明的代码示例。

可能的策略

  • 键盘记录器- 问题:记录密码,不记录选项卡/历史记录完成(参见glenn 的回答
  • screen每秒进行一次回滚转储,并diff在它们之间查找新的回滚行——问题:如何以有用的自动化方式实现?
  • ssh "$@" | tee >(some_cleaner_function >> $logfile) -- 问题:无法处理链式会话中的多行命令或历史记录,需要仔细清理(见我的回答)
  • 以上一些的组合

一个例子

以下 SSH 会话:

user@local:~$ ssh user@remote
Last …
Run Code Online (Sandbox Code Playgroud)

command-line shell bash openssh

14
推荐指数
1
解决办法
2万
查看次数

systemd:按需启动尚不支持基于套接字的激活的 postgresql 和 mysql 等服务

在我的笔记本电脑上,我仅使用 MySQL 和 PostgreSQL 进行测试。在我开始编程之前我不需要它们,这可能是启动后几个小时。但是手动启动服务并输入我的 sudo 密码是一个(小)烦恼。

我读到 systemd 仅在访问该服务的端口时才支持启动服务。但是在 Google 上的快速搜索似乎表明 PG 和 MySQL 尚不支持基于套接字的激活。

我意识到我可以使用 shell 脚本来破解它或等待维护者修复服务,但我现在正在寻找更好的方法(用于教育目的)。

问题:如何以利用 systemd 功能或被推荐为 Linux“最佳实践”的方式实现此类服务的按需启动?

一些想法:

  • 是否有我可以安装的服务可以根据条件(例如正在运行的特定进程)处理自动启动和自动停止服务?
  • 是否有由套接字激活并依次启动目标服务的代理服务?

systemd 229、Kubuntu 16.04、MySQL 5.7、PostgreSQL 9.5

更新:答案:

我如何按照 Siosm 的建议使用 systemd-socket-proxyd:

/etc/mysql/mysql.conf.d/mysqld.cnf

port        = 13306
Run Code Online (Sandbox Code Playgroud)

/etc/systemd/system/proxy-to-mysql.socket

[Socket]
ListenStream=0.0.0.0:3306

[Install]
WantedBy=sockets.target
Run Code Online (Sandbox Code Playgroud)

/etc/systemd/system/proxy-to-mysql.service

[Unit]
Requires=mysql.service
After=mysql.service

[Service]
# note: this path may vary
ExecStart=/lib/systemd/systemd-socket-proxyd 127.0.0.1:13306
PrivateTmp=no
PrivateNetwork=no
Run Code Online (Sandbox Code Playgroud)

根据需要重新加载/停止/启动:

sudo systemctl daemon-reload
sudo systemctl enable proxy-to-mysql.socket
sudo systemctl start proxy-to-mysql.socket
sudo systemctl stop mysql.service  # for testing …
Run Code Online (Sandbox Code Playgroud)

systemd services

12
推荐指数
2
解决办法
2465
查看次数

如何在kde4/plasma5中添加图标搜索路径?

我有各种非 kde 应用程序,它们将图标放置在系统中的各个位置,并且 Plasma5 菜单和任务管理器小部件会忽略它们,除非我仅在以下位置符号链接到它们:

  • /usr/share/icons/hicolor/scalable/apps/<icon-name>.svg(如果图标是 svg)或
  • /usr/share/icons/hicolor/48x48/apps/<icon-name>.png(如果图标为 48x48)或
  • /usr/share/icons/hicolor/32x32/apps/<icon-name>.png(如果图标是 32x32)
  • 奇怪的是, 128x128不起作用,大图标必须调整为 48x48 或 32x32 并放入相应的目录中。

这是为什么?如何添加更多搜索路径和图标大小?例如,gworldclock仅在 中放置图标/usr/share/pixmaps/gworldclock.png,其他应用程序仅安装 128x128 的图标。

已经尝试过:

我尝试修改KDEDIRSin~/.kde/env/somefile.sh~/.pam_environment,但这些都对 的输出没有任何影响kde4-config --path icon。我还在我的用户图标目录(.kde/share/icons/)中创建了符号链接,但这也没有效果。指定桌面文件中图标的绝对路径似乎也不起作用(尽管到目前为止我只尝试过使用 128x128 图标)。

更多信息:

当前搜索路径:

$ kde4-config --path icon
/home/oleg/.kde/share/icons/:/usr/share/kubuntu-default-settings/kde4-profile/default/share/icons/:/usr/share/icons/
Run Code Online (Sandbox Code Playgroud)

软件版本(Kubuntu 15.04):

$ kde4-config --version
Qt: 4.8.6
KDE Development Platform: 4.14.13
kde4-config: 1.0
$ plasmashell --version
plasmashell 5.4.2
Run Code Online (Sandbox Code Playgroud)

kde icons plasma kde4 plasma5

5
推荐指数
0
解决办法
1256
查看次数

创建压缩的、可同步的目录镜像的正确方法?

我想创建一些目录的压缩镜像,以便可以从原始目标和远程目标再次同步。

我可以通过两步低效地完成:

rsync -a /source/ /compressed-mirror/
gzip --recursive --rsyncable --force /compressed-mirror/
# later: rsync -a /compressed-mirror/ remote:/another-compressed-mirror/
Run Code Online (Sandbox Code Playgroud)

问题是,如果我重新运行第一个 rsync 来更新镜像,它需要重新复制和 gzip 所有源文件,即使只有其中几个发生了更改。

问题:是否有其他方法可以最大限度地减少每次更新所需的数据传输量和硬盘使用量?

笔记:

  • 我并没有坚持使用 gzip 进行压缩 - 我选择它只是因为它允许重新同步压缩文件。

  • 本地压缩镜像的目的是最大限度地减少与远程镜像进行 rsync 所需的“网络运行”时间,因为源计算机(笔记本电脑)的互联网连接和电源状态都不可靠。本地镜像的某些部分在 rsync 到远程镜像之前会被加密。然后,远程镜像会使用 rsnapshot 进行版本控制,并通过更稳定的互联网连接上传到另一台远程服务器。

更新/想法:

  • 使用文件系统压缩(请参阅 cas 的评论) - 但这会强制 rsync 在将文件传输到远程服务器时重新压缩文件,这似乎是多余的。
  • 保持 rsync 目录未压缩。每次 rsync 更新它时,记录更改的文件。对于每个更改的文件,在压缩镜像中单独创建一个压缩副本(或删除它)。但下一个想法可以更有效地完成同样的事情:
  • 在源中保留文件路径和文件大小(或校验和)的列表。每次更新时,创建一个新列表并将其与旧列表进行比较。对于每个更改的文件,使用 . 在第一个压缩镜像中单独创建一个 gzip 压缩副本(或删除它)gzip < source/path/file > mirror/path/file.gz。这似乎是迄今为止最有效的解决方案。

backup compression gzip rsync

5
推荐指数
1
解决办法
2万
查看次数

在 /etc/network/interfaces 或类似文件中配置 dummy0 的现代方法?

我正在寻找一种干净、“现代”的方式来配置、启动和停止dummy0网络接口(从dummy内核模块)。

/etc/network/interfaces曾经在较旧的系统上工作,但现在在ifup dummy0以下系统上静默失败:

iface dummy0 inet static
   address 10.10.0.1
   netmask 255.255.255.0
   # post-up ip link set dummy0 multicast on  
Run Code Online (Sandbox Code Playgroud)

取消注释该post-up行会产生此错误(显示它运行但从未创建接口):dummy0: post-up cmd 'ip link set dummy0 multicast on'failed: returned 1 (Cannot find device "dummy0")

这个 shell 脚本运行良好,但不是一个很好的干净的配置文件:

#!/bin/sh
sudo ip link add dummy0 type dummy
sudo ip link set dummy0 multicast on
sudo ip addr add 10.10.0.1/24 dev dummy0
sudo ip link set dummy0 up
Run Code Online (Sandbox Code Playgroud)

我的目的手动 …

configuration systemd network-interface

3
推荐指数
1
解决办法
7728
查看次数