假设我想对包含单词 的cmd
所有*.cpp
和文件执行。*.hpp
FOO
就找到这些文件而言,我知道我能做到,
find /path/to/dir -name '*.[hc]pp' -exec grep -l 'FOO' {} +
但是扩展处理以便我可以执行(例如cmd
对每个文件)执行的正确方法是什么?
我知道我可以在 中-exec bash -c '...'
编写“如果文件内容包含,则在文件上FOO
运行cmd
”逻辑...
,但这感觉就像是用大炮射苍蝇。
假设我想对包含单词 的cmd
所有*.cpp
和文件执行。*.hpp
FOO
就找到这些文件而言,我知道我能做到,
find /path/to/dir -name '*.[hc]pp' -exec grep -l 'FOO' {} +
但是扩展处理以便我可以执行(例如cmd
对每个文件)执行的正确方法是什么?
我知道我可以在 中-exec bash -c '...'
编写“如果文件内容包含,则在文件上FOO
运行cmd
”逻辑...
,但这感觉就像是用大炮射苍蝇。
我使用 ArchLinux,但这应该是无关紧要的,除了我经常参考它的 wiki 页面的原因之外。
我认为对通知如何工作以及“玩家”如何交互以使通知发挥作用并没有真正清楚的了解:
notify-send
我可以用这个东西来弹出通知吗?是(好吧,一个)客户端吗?libnotify
?为了理解这一点并在我的系统上设置通知,我参考了这个 wiki 页面。
我先尝试过notification-daemon
。仅安装后这并不起作用。为了使调用notify-send
成功,必须手动启动它(这意味着执行),以某种方式自动启动它,或者使用此内容/usr/lib/notification-daemon-1.0/notification-daemon
创建一个文件/usr/share/dbus-1/services/org.freedesktop.Notifications.service
[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/lib/notification-daemon-1.0/notification-daemon
然后我尝试了dunst
,但是,一旦安装,就可以正常工作,从某种意义上说,可以notify-send
正常工作。我认为这从根本上来说是因为它在第一次调用时就启动了notify-send
(这意味着我最初的印象是它在我卸载它之后也能工作;那是因为该dunst
进程正在运行),但它是如何做到这一点的呢?
这两个 和notification-daemon
都位于“通知服务器 > 独立”dunst
部分下,但它们也称为“通知守护程序”;这是否意味着通知守护程序和通知服务器是同义词?如果不是,区别在哪里?
从用户(我)的角度来看,这两种美学之间有区别吗?我的意思是,当一个正在运行与另一个正在运行时,我发现通知看起来不同。顺便说一句,这里出现了“他们在提供什么服务?”的问题,因为在我看来,他们只是在等待其他工具向他们发送通知,以便他们可以以良好的方式展示它们。或者他们俩都做这两件事?无论哪种情况,通知最初来自哪里?他们如何到达通知框?
不管怎样,如果我想对通知进行自定义操作怎么办?假设我想获取所有这些内容并拥有自己的 shell 脚本,只需将它们附加到一个文件中~/notifications
。这是否意味着我正在编写自己的通知服务器?还是客户?或者是什么?
我问的原因是我想尝试一下可以在xmobar
状态栏中显示通知的想法(我与 XMonad 窗口管理器一起使用),所以我试图理解所有的部分。
我还看了一下statnot
它看起来非常非常瘦并且没有多余的装饰,但是参考我的上一段,感觉使用statnot
仍然意味着我仍然需要编写一个配置,通过函数update_text
调用xmobar 或 xmonad 公开的一些 API。这样我就无法控制,比如说,我想一次显示多少个通知。
我有点迷失了:/
试图从桌面通知规范中理解我的这个问题的含义并没有成功:D
如何在 Debian 上修复此错误
E: The repository 'https://deb.nodesource.com/node_current.x nodistro Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
如果错误是运行这个
sudo add-apt-repository ppa:agornostal/ulauncher -y && sudo apt update
哪个是为 Ubuntu 设计的?
我想在 Debian 11 机器上安装ulauncher,所以我在链接页面查找Ubuntu (Debian)指令,然后运行命令
sudo add-apt-repository universe -y && sudo add-apt-repository ppa:agornostal/ulauncher -y && sudo apt update && sudo apt install ulauncher
失败了,因为那是通过 PPA (Ubuntu) 安装,我没有读过,因为上面的Ubuntu (Debian)欺骗我认为这些说明是常见的(我通常是 ArchLinux 用户,所以我不是不再用于在 Ubuntu 或 Debian 上安装东西)。
错误很简单
Error: 'universe' invalid
所以我尝试执行
sudo add-apt-repository ppa:agornostal/ulauncher -y && sudo apt update && sudo apt install ulauncher
失败了
E: The repository 'http://ppa.launchpad.net/agornostal/ulauncher/ubuntu noble Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: The repository 'https://deb.nodesource.com/node_current.x nodistro Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
那时我更仔细地阅读了说明,发现在 Debian 上我应该执行这些命令
sudo apt update && sudo apt install -y gnupg
gpg --keyserver keyserver.ubuntu.com --recv 0xfaf1020699503176
gpg --export 0xfaf1020699503176 | sudo tee /usr/share/keyrings/ulauncher-archive-keyring.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/ulauncher-archive-keyring.gpg] \
http://ppa.launchpad.net/agornostal/ulauncher/ubuntu jammy main" \
| sudo tee /etc/apt/sources.list.d/ulauncher-jammy.list
sudo apt update && sudo apt install ulauncher
所以我尝试了,但错误仍然与上面相同,所以我知道我需要以某种方式撤消我的第一次针对 Ubuntu 的尝试。我试过这个:
sudo add-apt-repository -r ppa:agornostal/ulauncher
所以来自 Debian 特定指令的第一个命令
sudo apt update && sudo apt install -y gnupg
仍然有错误,但少了一些:
E: The repository 'https://deb.nodesource.com/node_current.x nodistro Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
我该如何解决?
据我了解,终端仿真器是一个基于 GUI 的程序,它为我提供了一个类似终端的视口,并允许我与它进行交互,就像我对终端所做的那样,除了它具有来自的所有支持X 系统,所以我怀疑这ssh user@ip
不会让我访问在远程机器上运行的终端仿真器。如果我想使用它,我需要通过 VNC 连接到那台机器,然后在该桌面上打开一个终端仿真器窗口。
但是我是否可以访问虚拟控制台(例如,在我通过Ctrl++获得的远程计算机上的物理控制台Alt)?我可以,这让我可以访问 X 附带的剪贴板,所以感觉我也不在虚拟控制台中......F2ssh -X ...
至于提议的副本,由于我的问题专门针对 SSH,我可以收集的信息如下:
SSH(将一台机器上的终端与另一台机器上的程序连接起来)
伪终端使用 PTY“设备”来安排控制台应用程序和在用户空间中运行的终端制作程序之间的通信。示例是基于 X 的终端仿真器和 sshd,它们为每个登录会话分配一个假名。
可能有一些应用程序“模拟”终端接受用户的击键并将它们发送到某个地方(xterm 和 ssh 是很好的例子)。内核中有一个称为伪终端的 API 。所以你的tty可能真的连接到某个应用程序而不是真正的终端。Xterm 使用 X11 显示文本,而 ssh 使用网络连接。
所以我的问题的答案似乎是“它可以访问伪终端”。
我为什么要问这个?
你可以猜到,这主要是出于好奇。但是,为什么我的脑海里会涌现出好奇心呢?
好吧,有一段时间我注意到我很不高兴,在我跑去clear
清理终端屏幕之后,我不得不把眼睛从屏幕底部移开,在连续命令和他们的命令之后提示结束了输出,到屏幕的顶部。
那是我将其插入我的~/.bashrc
:
__prompt_to_bottom_line() {
tput cup $LINES
}
alias clear='clear && __prompt_to_bottom_line'
对我来说,运行后提示在底部clear
意味着提示总是在底部,从不在顶部。其他一切都和平常一样。
其他人呢?
我想我不是唯一一个感到这种必要性的人。以这个问题为例:用户希望提示始终位于顶部,输出位于其下方,但顺序相反(但一个命令的一个输出,即使是多行,也不会颠倒,很明显)。
如果您考虑一下,该用户希望在屏幕上看到tac
的正是我所期望的(除了多行输出没有反转)。
所以我的问题是
为什么终端设计有这种不统一的行为?我所说的非均匀是指它从一种除非一个 s 否则永远不会重复的情况开始,这将在clear
命令后更改命令,提示在屏幕下方移动,最终提示最终处于“稳定”位置屏幕底部,它不会再从那里移动,除非一个clear
s.
输出向下/向上推总是在顶部/底部的线不是更适合眼睛的设计吗?
的输出jobs
看起来像这样
[1] Stopped TERM=xterm-256color vim --servername vim ~/.gitconfig
[2]- Stopped TERM=xterm-256color vim --servername vim ~/.vimrc (wd: ~)
[3]+ Stopped TERM=xterm-256color vim --servername vim i3blocks.conf (wd: ~/.config/i3/configs)
其中部分(如果存在)显示相应作业开始的目录。(wd: path)
path
有几次我想搬到那个目录来做一份工作。
有这样做的实用程序吗?
在创建这两个文件时"\t": menu-complete
,~/.inputrc
$ touch one.two.txt
$ touch one.four.txt
下面开始写,
$ ls one
打Tab,你会得到
$ ls one.four.txt
现在将光标移动到 just before four
、 delete four
、 write only t
,然后Tab再次点击。你会得到
$ ls one.two.txt.txt
有没有办法防止.txt
在此工作流程中重复?
当我按下 时,我使用menu-complete
bash 函数循环完成Tab,我对此很满意。但是以下情况经常发生在我身上。
假设我在longparthardtoremember.with.QQQQQQQ.extension
包含文件的目录中查找文件
longparthardtoremember.with.AAAAAAA.nice.long.extension
longparthardtoremember.with.BBBBBBB.very.nice.long.extension
...
如果 I Tab-complete$ long
将插入第一个文件名。那时,我想移动到文件名的中间,删除AAAAAAA
部分,键入B
,然后Tab再次完成。如果我这样做,后面的所有部分BBBBBBB
也会被插入,从而导致重复,这显然是我不希望的。
使用vi
编辑模式,我处理这个问题的速度相当快(我快速移动到重复的部分并将其删除),但它仍然很烦人。
纯属偶然,我skip-completed-text
在 bash 的手册页中找到了 bash 选项。这不是我需要的吗?我已经设置了它on
,但我看不出工作中完成的行为有任何区别Tab。我误解了手册页吗?
例如,当我输入 时,xdg-mime query filetype Video/movie.mkv
输出为video/x-matroska
; 如果我再输入xdg-mime query default video/x-matroska
,输出是mplayer.desktop
,这确实是我输入时使用的应用程序xdg-open Video/movie.mkv
。我为其设置了特定默认应用程序的其他文件类型也是如此。
另一方面,当我在 Dropbox 托盘图标弹出菜单中单击“打开 Dropbox 文件夹”,或者当我在传输的下载文件列表中右键单击并“打开文件夹”时,没有任何反应;所以,我希望没有应用程序与目录相关联。
考虑到这一点,到目前为止我尝试的是 run xdg-mime query filetype Video
,它返回inode/directory
,然后 run xdg-mime query default inode/directory
,它返回ranger.desktop
我的文件管理器。如果一切正常,这听起来完全符合我的预期,但事实并非如此。
为什么当我在弹出菜单中单击“打开文件夹”等时没有任何反应?
由于我在 Arch Linux 上安装了 i3,我注意到字体太大(我首先看到的是底部的 i3bar),所以我更改了.config/i3/config
文件中的字体大小(现在该行显示为font pango:DejaVuSansMono Nerd Font Mono 5
.
很快我注意到应用程序的菜单栏的尺寸太大了,所以我用 Lxappearance 编辑它(现在默认字体是DejaVuSansMono Nerd Font Book
size 4
)并且 Lxappearance 的 GUI 本身看起来很完美。
但其余部分仍然没有,正如您从屏幕截图中看到的那样:在浮动窗口中字体太大,我会说是巨大的,而在右侧Open
窗口中它很小,如果不是不可见的话Audacity
;TikZiT
最后在左边的窗口上看起来很正常。
此外(我不知道如何拍照,但我确信它不会为这个问题添加任何内容),如果我右键单击 Dropbox 图标,我会在白色弹出窗口中看到一个巨大的字体-向上菜单(我通过将光标悬停在该图标上看到的相同字体);当我对 Skype (不在图片中)做同样的事情时,我看到的字体是 Arc-dark 弹出菜单上的小字体。
我对 ArchLinux 和 i3 生活的这个从头开始自己动手的世界很陌生。我宁愿在一两个星期后不放弃。
编辑 1
这是另一张图片,其中B
字体看起来还不错(我说不错,因为我什至不知道它们来自哪里),而A
字体太小了。哪些不是由qt5ct
.
编辑 2
我开始认为 GTK 和 Qt 之间可能没有冲突:正如您在下面的屏幕截图中看到的那样,我设置了与qt5ct
(左)和lxappearance
(右)相似但绝对不相同的主题,但是pavucontrol
(中)使用 GTK , 呈现那个不可读的小字体。
[![在此处输入图像描述][4]][4]
我想我在过去几分钟内已经做了十几次系统重启来检查这个奇怪的行为。似乎 dropbox 服务在启动时成功或失败取决于我在输入密码的登录屏幕上花费了多少时间。我没有做过任何计时,所以我不知道确切的时间是多少,但不会超过半打秒。
当我快速输入密码时,Dropbox 启动,确实我验证了以下内容,
$ systemctl status [email protected]
● [email protected] - Dropbox
Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/[email protected]
└─override.conf
Active: active (running) since Wed 2018-06-13 17:07:04 CEST; 6min ago
Main PID: 1006 (dropbox)
Tasks: 84 (limit: 19660)
Memory: 148.0M
CGroup: /system.slice/system-dropbox.slice/[email protected]
├─1006 /usr/bin/dropbox
├─1052 dbus-launch --autolaunch 9f3c6fabb4aa40d1b7d5b3a3881af003 --binary-syntax --close-stderr
├─1053 /usr/bin/dbus-daemon --syslog-only --fork --print-pid 5 --print-address 7 --session
└─1057 /usr/bin/dunst
Jun 13 17:07:05 greywarden dropbox[1006]: dropbox: load fq extension '/opt/dropbox/PyQt5.QtWebKitWidgets.so'
Jun 13 17:07:05 greywarden dropbox[1006]: dropbox: load fq extension '/opt/dropbox/PyQt5.QtWidgets.so'
Jun 13 17:07:05 greywarden dropbox[1006]: dropbox: load fq extension '/opt/dropbox/PyQt5.QtPrintSupport.so'
Jun 13 17:07:05 greywarden dropbox[1006]: dropbox: load fq extension '/opt/dropbox/PyQt5.QtDBus.so'
Jun 13 17:07:05 greywarden dbus-daemon[1053]: [session uid=1000 pid=1051] Activating service name='org.freedesktop.Notifications' requested by ':1.0' (uid=1000 pid=1006 comm="/usr/bin/dropbox ")
Jun 13 17:07:05 greywarden org.freedesktop.Notifications[1053]: Warning: 'allow_markup' is deprecated, please use 'markup' instead.
Jun 13 17:07:05 greywarden org.freedesktop.Notifications[1053]: Warning: The frame section is deprecated, width has been renamed to frame_width and moved to the global section.
Jun 13 17:07:05 greywarden org.freedesktop.Notifications[1053]: Warning: The frame section is deprecated, color has been renamed to frame_color and moved to the global section.
Jun 13 17:07:05 greywarden org.freedesktop.Notifications[1053]: Warning: Unknown keyboard shortcut: mod4+grave
Jun 13 17:07:05 greywarden dbus-daemon[1053]: [session uid=1000 pid=1051] Successfully activated service 'org.freedesktop.Notifications'
另一方面,当我输入密码的速度太慢时(例如键入、退格、重新键入……)或者我在看书时根本不看屏幕,输出是
$ systemctl status [email protected]
● [email protected] - Dropbox
Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/[email protected]
└─override.conf
Active: failed (Result: exit-code) since Wed 2018-06-13 17:15:03 CEST; 39s ago
Process: 1031 ExecStart=/usr/bin/dropbox (code=exited, status=250)
Main PID: 1031 (code=exited, status=250)
并且保管箱确实没有运行(没有托盘图标)。
我在 ArchLinux 和 LightDM 登录管理器上运行 i3。我遵循了维基页面上的防止自动更新和自动启动部分,但我不太可能混淆了使用 systemd 启动时的自动启动和使用 systemd登录时的自动启动,这可能是问题的根源。
总的来说,我对 Linux 并不陌生,但对 Arch 还是陌生的。我已经安装了两次(第一次在 HDD 上,只是在等待 SSD 交付给我时尝试,第二次,几天后,在 SSD 上),i3 和其他程序为了有可用的桌面环境。顺便说一句,我的选择是基于我的品味(Vim 上瘾)和对官方 Arch wiki 页面的纯粹阅读之间的匹配。
目前有一件事情让我非常恼火:当我打开 Spotify(从 AUR 安装aurman -S
,通过 )或 Qutebrowser(官方,通过sudo pacman -S
)以及可能的其他应用程序时,无论是从终端urxvt
还是通过rofi
,我都会遇到完全的“冻结” " 持续长达五十秒 (!) 的键盘,而鼠标仍然与环境完美交互。例如,我可以做这件有趣的事:
1
同时2
,用手指交替和狂热地按住$mod
,Alt
在我的情况下,用拇指,pavucontrol
,...)。显然,如果我移动到带有全屏程序的工作区,我将被困在该工作区中,直到那漫长的五十(或多或少)秒过去。键盘是带 USB 接收器的无线罗技 K270(无线 M185 鼠标来自同一个盒子),但老实说我不知道我还能提供什么其他细节,所以请问我。(我真的不认为文件系统可以在这件事中发挥任何作用,但是,如果我错了,它是btrfs
。)
我的主板是 X399 Aorus Gaming 7,并且有
9 个端口成对布置,如(字母 = 颜色)
YY
WB
BB
BB
R