小编400*_*Cat的帖子

D-Bus 有什么实际用途?

dbus 应该提供“一种应用程序相互通信的简单方法”。

但我仍然不确定它实际上有什么用处。我从未见过dbus有用的情况,我只看到某些dbus组件遇到错误的警告,例如当我从命令行启动终止符时(以便我可以看到错误):

Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files
Run Code Online (Sandbox Code Playgroud)

我通过添加NO_AT_BRIDGE=1/etc/environment. 我不知道那有什么作用。

几乎所有 gui 应用程序似乎都与dbus. 有些允许在没有 的情况下启动dbus,即:

terminator --no-dbus
Run Code Online (Sandbox Code Playgroud)

我看不出行为有什么不同。什么应该停止工作,什么时候terminator开始没有dbus

另外,我尝试禁用各种 dbus 组件以查看停止工作的内容:

我删除了/etc/X11/Xsession.d/95dbus_update-activation-env只是为了看看会发生什么。它包含以下代码:

if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] && [ -x "/usr/bin/dbus-update-activation-environment" ]; then
  # subshell so we can unset environment variables
  (
    # unset login-session-specifics
    unset XDG_SEAT
    unset XDG_SESSION_ID
    unset XDG_VTNR …
Run Code Online (Sandbox Code Playgroud)

openbox gui desktop-environment d-bus

51
推荐指数
4
解决办法
9684
查看次数

如何在终端中使用 256 色作为背景色

我知道如何在终端中为文本使用 256 种颜色:

printf "\033[38;5;196mhello\n"
Run Code Online (Sandbox Code Playgroud)

但是对于背景颜色,我似乎仅限于基本的8种颜色,即:

printf "\033[41mhello\n"
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用 256 色作为背景色?

我的意思是,终端已经知道颜色,所以应该是可能的。但是语法是什么?

如果相关,我将terminator用作我的终端模拟器和zsh我的外壳。

colors zsh terminal gnome-terminator ansi

9
推荐指数
2
解决办法
2204
查看次数

zsh 提示:检查是否在 git 存储库中并且没有被 git 忽略

在我的zshshell 中,我根据我是否在git存储库中动态更改提示。我正在使用以下 git 命令来检查:

if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
...
Run Code Online (Sandbox Code Playgroud)

现在我还想区分当前目录是否被git. 所以我在我的if声明中又添加了一张支票:

if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1) && ! $(git check-ignore . >/dev/null 2>&1); then
...
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想知道是否可以将其简化为一个git命令。由于在每个 上都会刷新提示ENTER,因此在某些较慢的机器上,它往往会显着降低 shell 的速度。

更新

@Stephen Kitt 接受的解决方案效果很好,但以下情况除外:

我正在跨文件系统使用存储库。让我们说 git 驻留在/.git(因为我想跟踪我的配置文件/etc),但我也想跟踪一些文件/var/foo,这是一个不同的分区/文件系统。

当我位于/并执行以下命令时,一切都按预期工作,并且我得到返回代码1(因为/var/foo正在被跟踪):

# git check-ignore -q /var/foo
Run Code Online (Sandbox Code Playgroud)

但是,当我位于 中的任何位置时/var,相同的命令会失败并显示错误代码128和以下错误消息:

# git check-ignore -q …
Run Code Online (Sandbox Code Playgroud)

prompt zsh git

9
推荐指数
2
解决办法
981
查看次数

zsh:使 ALT+BACKSPACE 在非字母数字字符处停止

zsh默认情况下通过,CTRL+wALT+Backspace似乎正是同样的效果。

我如何保持CTRL+w原样,并更改ALT+Backspace以使其停在非字母数字字符处。

即,当光标位于以下命令的末尾时:echo /aaa/bbb/ccc,按CTRL+w应离开echo,而按ALT+Backspace应离开echo /aaa/bbb/

更新

根据来自 的回答@Thomas Dickey,我已将以下内容添加到我的.zshrc

 my-backward-delete-word () {
    local WORDCHARS='~!#$%^&*(){}[]<>?+;'
    zle backward-delete-word
 }
 zle -N my-backward-delete-word

 bindkey    '\e^?' my-backward-delete-word
Run Code Online (Sandbox Code Playgroud)

现在命令行编辑器的行为与我预期的不同。

例如,单引号字符'未在 my 中枚举WORDCHARS,因此当我按下 时Alt+BackSpacebackward-delete-word应该停在'

这适用于第一个示例,但不适用于第二个示例:

$ echo 'asdf'
$ echo …
Run Code Online (Sandbox Code Playgroud)

command-line keyboard-shortcuts zsh

8
推荐指数
1
解决办法
2955
查看次数

ssh 的 zsh 补全会将主机名与本地文件混淆

假设我有以下条目 /etc/hosts

192.168.1.10      server1.mydomain.com
Run Code Online (Sandbox Code Playgroud)

SERVER-FILES在当前目录中有一个目录。我想scpSERVER-FILES某个地方的目录。我输入SE并使用自动完成功能来完成目录名称:

$ scp -rp SE<TAB>
Run Code Online (Sandbox Code Playgroud)

这个完成应该是完全明确的。但是 zsh 自动完成尝试过于智能,并且不区分大小写处理主机名,因此尝试匹配SE主机名:

$ scp -rp SE<TAB>
SERVER-FILES/
server1.mydomain.com
Run Code Online (Sandbox Code Playgroud)

如何禁用这个烦人的功能,其中 zsh 试图匹配主机名不区分大小写,从而完成SE<TAB> to server1.mydomain.com` ?

更新:

根据来自 的建议@zeppelin,我更改了 ssh 完成文件中的以下行Unix/_ssh

- compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts
+ compadd "$@" $config_hosts
Run Code Online (Sandbox Code Playgroud)

但这没有帮助。它完全没有效果。

我不明白来自@Tomasz Pala. 我的 zsh 完成不区分大小写。

请某人告诉我我需要改变什么/usr/share/zsh/functions/Completion/Unix/_foo来改变这种行为。

更新 2

我终于缩小了问题的范围,并找出了为什么解决方案@Tomasz Pala对他有用,但对我不起作用:

当我Unix/_hosts在新设置的机器/用户帐户上更改文件时,该解决方案有效。

scp -r SE<TAB>
Run Code Online (Sandbox Code Playgroud)

上面的命令忽略 …

zsh autocomplete

8
推荐指数
1
解决办法
1760
查看次数

xset:显示空白时忽略鼠标移动

我可以使用以下命令空白/关闭笔记本电脑上的显示:

xset dpms force off
Run Code Online (Sandbox Code Playgroud)

然后,任何鼠标移动或键盘按下都会“唤醒”显示。

是否可以忽略鼠标移动,只在键盘操作时取消空白屏幕?

如果目前无法做到xset这一点,我欢迎任何关于如何修补源代码的建议。

我正在使用 Debian 10。

screensaver power-management display xset

8
推荐指数
1
解决办法
190
查看次数

Chromium 浏览器:超过数据 ulimit

我已经在/etc/security/limits.conf. 当我以testuser正常用户身份登录我的桌面环境时(使用超薄login管理器),一切正常。

当我登录的用户testuser通过Xephyr(从我的其他会议的其他用户),一切工作正常,除了chromium浏览器。这是我遇到的错误dmesg

Chrome_ChildIOT (2472): VmData 4310827008 exceed data ulimit 4294967296. Update limits or use boot option ignore_rlimit_data.
Run Code Online (Sandbox Code Playgroud)

铬不可用(它启动,但无限期地等待加载任何页面)

除了chromium设置了正确的限制外,所有其他程序。我已经使用以下方法验证了这一点:

find /proc/ -maxdepth 1 -user testuser -exec cat {}/limits \; | grep 'Max data size'
Run Code Online (Sandbox Code Playgroud)

所有PIDsMax data size设置为无限制:

Max data size             unlimited            unlimited            bytes
Run Code Online (Sandbox Code Playgroud)

除了chromium进程:

Max data size             4294967296           4294967296           bytes     
Max data size             17179869184          17179869184          bytes     
Max …
Run Code Online (Sandbox Code Playgroud)

chrome ulimit

7
推荐指数
1
解决办法
1004
查看次数

Thunderbird:nsemail 和 nscopy 文件留在 /tmp 中

我在 Debian 上使用 Thunderbird 68。

对于我发送的任何电子邮件,Thunderbird 在 /tmp 中创建临时文件:

/tmp/nsmail.tmp
/tmp/nsmail-1.tmp
/tmp/nsmail-2.tmp
/tmp/nscopy.tmp
/tmp/nscopy-1.tmp
Run Code Online (Sandbox Code Playgroud)

不仅在发送电子邮件后这些文件没有被删除,更糟糕的是,在 Thunderbird 关闭后它们仍然留在那里。

我在UbuntuBugzilla上都找到了错误报告,但没有解决方案。

我发现在发送电子邮件后不立即删除临时文件是一种非常糟糕的做法。绝对令人发指的是,即使应用程序退出也不会清理其临时文件。

作为解决方法,我可以更改创建这些临时文件的位置吗?例如,使用~/.cache/thunderbird/会更合适。

thunderbird

7
推荐指数
1
解决办法
728
查看次数

zsh:对kill-word 和forward-word/backward-word 使用不同的WORDCHARS

当我不包括/in 时WORDCHARS,即:

WORDCHARS='~!#$%^&*(){}[]<>?.+;-'
Run Code Online (Sandbox Code Playgroud)

然后kill-word按需要工作:使用Alt+ d,我可以删除文件系统路径的一部分(在每个 处停止/)。

但是当使用Ctrl+RightCtrl+ 时Left,我希望有不同的行为:我不希望光标停在每个/. 我想跳过整个路径作为一个词。

我可以WORDCHARS只为forward-wordand使用不同的backward-word吗?

zsh

6
推荐指数
1
解决办法
1438
查看次数

如何设置登录脚本来运行 xrandr?

我正在使用 3 台显示器,其中 2 台正在旋转。

我无法成功配置xorg.conf以旋转 2 个显示器,但我找到了一个xrandr可以在登录管理器启动后使用的命令:

xrandr --output DisplayPort-1 --rotate right --left-of DisplayPort-0
xrandr --output DisplayPort-2 --rotate left --right-of DisplayPort-0
Run Code Online (Sandbox Code Playgroud)

目前,我在登录后手动运行这些命令。

我应该把这些放在哪里,以便我的显示器在登录时旋转。另外,我可以在全球范围内做吗?因此,当我以其他用户身份登录时,显示器会旋转。还是每个用户在登录后都需要一个用户脚本来执行此操作?

xrandr x-server

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