您尚未登录。

#16 2021-09-21 09:55:38

SamLukeYes
会员
所在地: Canton, China
注册时间: 2020-07-19
帖子: 320
个人网站

Re: 提問的智慧解決一切

守約 说:
SamLukeYes 说:
守約 说:

啊?是什麽問題呀?我暫時還沒察覺有什麽問題,你說的是哪方面的呀,安裝不成功還是什麽,我還是之前看不知道哪個帖子裡這樣說的,就記下了。

-Sy 后面一定要接 u,不然就会只更新了软件包数据库而没有更新已安装的软件包,再获取新的软件包就可能导致部分更新。

是這樣的,-sy我看說是同步軟件倉庫,所以每次我安裝包的時候用-sy,然後-syu我看的說是更新的,我就每次開機或關機的時候用一次-syu,請問我這樣用能不能避免你說的那個部分更新的情況啊?

不更新的时候不要同步软件仓库,只要定期滚就行

离线

#17 2021-09-21 17:54:56

SamLukeYes
会员
所在地: Canton, China
注册时间: 2020-07-19
帖子: 320
个人网站

Re: 提問的智慧解決一切

守約 说:

你的意思是說裝東西就衹用-S,然後更新就-Syu,是這樣子嗎?

是的。可以设想一下这样一种情况:假如你的 Arch 有几个小时或者几天没滚了,有些软件包已经过期,但落后得还不是太多。这时,如果你需要安装一个新的软件包,只用 -S 的话,pacman 就会根据本地的数据库试图取回和系统上次更新的时间点相匹配的软件包版本。由于软件仓库通常会保留若干个历史版本(没记错的话惯例是 3 个),即使要装的这个包有更新了,pacman 仍然大概率能取回正确的版本(如果找不到的话就说明远程仓库已经把这个历史版本删了,该滚一滚了)。但如果用了 -Sy,就会造成数据库已经更新,而实际安装的软件包还没更新的情况。这时再安装新的软件包,就有可能造成“部分更新”。为了保证软件包数据库和实际安装的软件包版本的一致性,-S 的选项 y 一定要和 u 一起使用。

离线

#18 2021-09-25 01:04:30

tanloong
会员
注册时间: 2021-08-15
帖子: 28

Re: 提問的智慧解決一切

恰好我用的就是 slstatus,我整理了一下它的配置方法,希望能有用。

下载

使用 git 下载 slstatus 的源代码,这里我下载到家目录下的 software 目录。

git clone https://git.suckless.org/slstatus ~/software/slstatus # 下载源代码
配置

编辑 config.h 来自定义您的状态栏,拿我的为例,以供参考。

const unsigned int interval = 2000; 
// 每隔 2s 更新一次
static const char unknown_str[] = "n/a";
// 如果某个值不存在,就显示 n/a(默认),比如断网时 IP 地址就会显示成 n/a
#define MAXLEN 2048
// 状态栏最大字符数量 MAXLEN,如果超过了它,第 MAXLEN 个字符及其右边的字符会被丢弃。
// 下面的注释介绍了 slstatus 的各种函数,每个函数负责显示一项信息。

/*
 * 函数                 描述                                 参数 (示例)
 *
 * battery_perc        电量(百分比形式)                  电池名称 (BAT0)
 *                                                         在 OpenBSD/FreeBSD 上无需参数
 * battery_state       电池的状态:是不是正在充电          电池名称 (BAT0)
 *                                                         在 OpenBSD/FreeBSD 上无需参数
 * battery_remaining   剩下的电量还能撑多久                电池名称 (BAT0)
 *                                                         在 OpenBSD/FreeBSD 上无需参数
 * cpu_perc            CPU 的利用率(百分比形式)          无
 * cpu_freq            CPU 的频率(单位是 MHz)            无
 * datetime            日期和时间                          格式化字符串 (%F %T)
 * disk_free           硬盘还剩多少(单位是 GB)           硬盘的挂载点 (/)
 * disk_perc           硬盘已经使用了多少 (百分比形式)   硬盘的挂载点 (/)
 * disk_total          硬盘总量(单位是 GB)               硬盘的挂载点 (/)
 * disk_used           硬盘已经使用了多少(单位是 GB)     硬盘的挂载点 (/)
 * entropy             系统的可用熵值,该值越大系统越安全  无
 * gid                 当前用户的 GID                      无
 * hostname            主机名                              无
 * ipv4                IPv4 的地址                         网卡名字 (eth0)
 * ipv6                IPv6 的地址                         网卡名字 (eth0)
 * kernel_release      内核版本号                          无
 * keyboard_indicators 显示大写锁定和数字键盘是否开启      格式化字符串 (c?n?)

 * 参数由字母 c 和字母 n 构成,大小写都可以。c 表示大写锁定,n 表示数字键盘。
 * c 和 n 后面都可以附加一个问号"?"。
 * 如果加了问号 "?",只有锁定开启时才显示字母。比如开启大写锁定时显示 c,关闭时不显示。
 * 如果没加问号"?",锁定开启时显示大写字母,关闭时显示小写字母。

 * keymap              键盘布局                            无
 * load_avg            系统负载(共 3 个值,分别是 1 分钟、5 分钟和 15 分钟的平均负载)无
 * netspeed_rx         下行网速                            网卡名字 (wlan0)
 * netspeed_tx         上传网速                            网卡名字 (wlan0)
 * num_files           指定文件夹的文件数量                该文件夹的路径 (/home/foo/Inbox/cur)
 * ram_free            内存还剩多少(单位是 GB)           无
 * ram_perc            内存已经使用了多少(百分比形式)    无
 * ram_total           内存总量(单位是 GB)                无
 * ram_used            内存已经使用了多少(单位是 GB)     无
 * run_command         执行一个自定义的 shell 命令         具体的 shell 命令 (echo foo)
 * separator           各信息之间的分隔符                  无
 * swap_free           交换空间还剩多少(单位是 GB)       无
 * swap_perc           交换空间已经使用了多少(百分比形式)无
 * swap_total          交换空间总量(单位是 GB)           无
 * swap_used           交换空间已经使用了多少(单位是 GB) 无
 * temp                温度(单位是摄氏度)                传感器文件的路径 (/sys/class/thermal/...)
 *                                                         在 OpenBSD 上无需参数
 *                                                         在 FreeBSD 上需要热区 (thermal zone) 作参数 (tz0, tz1, etc.)
 * uid                 当前用户的 UID                      无
 * uptime              系统已经开机运行了多久              无
 * username            当前用户的用户名                    无
 * vol_perc            OSS/ALSA 音量(百分比形式)         mixer 文件的路径 (/dev/mixer)
 *                                                         在 OpenBSD 上无需参数
 * wifi_perc           WiFi 信号强度(百分比形式)         网卡名字 (wlan0)
 * wifi_essid          WiFi 的 ESSID                       网卡名字 (wlan0)
 */
static const struct arg args[] = {// 选择上面的函数,在下面添加您想让状态栏显示的信息
    // 函数          格式           参数 
    { ipv4,         " %s",         "wlan0" }, 
    // %s 代表 ipv4 的值;参数需要用双引号引起来,不能是单引号,
    // 因为 C 语言里单引号内的是字符常量,双引号内的是字符串常量,两者不一样。
    { separator,    "|",           NULL },
    // 用 "|" 间隔两项信息;参数 NULL 表示空,就是没有参数
    { battery_perc, "Battery %s%%","BAT0" },
    // 在 C 语言里 "%" 需要转义,用 "%%" 来表示
    { battery_state,"%s",          "BAT0" },
    { separator,    "|",           NULL },
    { disk_free,    "Disk %s",     "/" },
    { separator,    "|",           NULL },
    { vol_perc,     "Volume %s",   "/dev/mixer" },
    { separator,    "|",           NULL },
    { ram_free,     "Memory %s",   NULL },
    { separator,    "|",           NULL },
    { cpu_perc,     "CPU %s%%",    NULL },
    { separator,    "|",           NULL },
    { datetime,     "%s",          "%m月%d日周%u %H:%M" },
};
安装

slstatus 的默认安装目录是 /usr/local/,如果您想安装到别的地方,可以在执行下面的安装命令之前编辑 config.mk 文件,把第 7 行左右的 PREFIX 的值改成您想要的目录。这里我选择默认的安装目录。

执行下面的命令来安装 slstatus

cd ~/software/slstatus # 切换到 slstatus 目录
sudo make clean install # 安装

执行完后,slstatus 可执行程序和 slstatus.1 手册都已经被保存在安装目录 (默认 /usr/local/)下。

现在您可以把配置好的显示内容打印到终端上,来查看 slstatus 的效果

slstatus -1 # 只打印一次
slstatus -s # 连续打印,间隔时间是您在 config.h 里设置的时间,按 Ctrl+c 结束打印

把这些信息显示到状态栏上

slstatus &
设置进入图形界面时自动运行 slstatus

在 ~/.xinitrc 中添加

slstatus &

,注意一定要添加到 exec 命令的前面,否则 slstatus 不会被执行。

修改 slstatus 配置

安装并启动 slstatus 后,如果您又修改了 config.h 里的配置,可以用下面的命令启动新的 slstatus:

sudo make clean install # 重新编译
killall slstatus # 结束旧的 slstatus 进程
slstatus &
调整音量时及时更新状态栏

状态栏每隔固定时间才会更新,但我们希望调整音量时状态栏能立刻进行一次更新,来显示新的音量。我的解决办法是用下面的三个脚本来控制音量。

您需要先安装 pamixer (调整音量) 和 xorg-xsetroot (设置状态栏的内容)

sudo pacman -S pamixer xorg-xsetroot

~/.local/bin/vol-up

#!/usr/bin/env bash

# 音量增加 %5
pamixer -i 5

# 更新状态栏
status=$(slstatus -1)
xsetroot -name "$status" 

~/.local/bin/vol-down

#!/usr/bin/env bash

# 音量减少 %5
pamixer -d 5

# 更新状态栏
status=$(slstatus -1)
xsetroot -name "$status"

~/.local/bin/vol-toggle

#!/usr/bin/env bash

# 静音和取消静音
pamixer -t 

# 更新状态栏
status=$(slstatus -1)
xsetroot -name "$status"

给这三个脚本添加可执行权限:

chmod u+x ~/.local/bin/vol-*

将这三个脚本绑定到快捷键上。可以在 dwm 的 config.h 里进行绑定:

static const char *voltoggle[] = { "~/.local/bin/vol-toggle",  NULL };
static const char *voldown[] = { "~/.local/bin/vol-down",  NULL };
static const char *volup[]   = { "~/.local/bin/vol-up",  NULL };
...
static Key keys[] = {
/* modifier       key                          function       argument */
{ 0,              XF86XK_AudioMute,            spawn,         {.v = voltoggle } },
{ 0,              XF86XK_AudioLowerVolume,     spawn,         {.v = voldown } },
{ 0,              XF86XK_AudioRaiseVolume,     spawn,         {.v = volup   } },
};

您可以执行

xmodmap -pke | less 

来查看 XF86XK_AudioMute、XF86XK_AudioLowerVolume 和  XF86XK_AudioRaiseVolume 对应的按键,在我电脑上分别是 F1、F2 和 F3。

重新编译并重启 dwm 后,按 F1、F2 和 F3 键来调整音量,就能看到状态栏的音量信息会及时更新。

卸载

如果您想卸载 slstatus,执行下面的命令:

sudo make uninstall

执行完后,安装目录 (默认 /usr/local/) 下的 slstatus 可执行程序和 slstatus.1 手册都已经被删除。

排错

    (1) 音量显示 n/a

您可能没有 /dev/mixer 设备,您需要执行

sudo modprobe snd-pcm-oss

加载 snd-pcm-oss 模块。开机自动加载该模块

echo 'snd-pcm-oss' | sudo tee /etc/modules-load.d/snd-pcm-oss.conf

最近编辑记录 tanloong (2022-03-01 20:59:45)

离线

#19 2021-09-25 02:00:50

tanloong
会员
注册时间: 2021-08-15
帖子: 28

Re: 提問的智慧解決一切

不客气,整理它的时候我自己也发现很多没注意过的细节。嗯……关于那两个问题,我还真没遇到过。我可能明天试着查一查,或者您也可以问问其他人。

最近编辑记录 tanloong (2021-09-27 23:49:08)

离线

#20 2021-09-30 08:57:10

tanloong
会员
注册时间: 2021-08-15
帖子: 28

Re: 提問的智慧解決一切

给那三个控制音量的脚本添加执行权限试试?

离线

#21 2021-10-01 01:48:16

tanloong
会员
注册时间: 2021-08-15
帖子: 28

Re: 提問的智慧解決一切

我的输入法框架用的也是 fcitx5, 模拟终端用的是 st。
我的环境变量是这样的:

tan:~$ cat .pam_environment
INPUT_METHOD DEFAULT=fcitx
GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE DEFAULT=fcitx
XMODIFIERS DEFAULT="@im=fcitx"

我安装的 fcitx5 软件有这些:

tan:~$ sudo pacman -Qq | grep fcitx5
fcitx5
fcitx5-chinese-addons
fcitx5-configtool
fcitx5-gtk
fcitx5-material-color
fcitx5-pinyin-zhwiki
fcitx5-qt

我之前在 zathura (一个 pdf 阅读器) 上也无法使用中文输入法,我当时运行下面的命令之后就好了

sudo pacman -S fcitx5-qt fcitx5-gtk

最近编辑记录 tanloong (2021-10-01 02:31:03)

离线

#22 2021-10-01 12:57:56

WeepingDogel
狗狗
所在地: 狗窝
注册时间: 2021-07-10
帖子: 7
个人网站

Re: 提問的智慧解決一切

支持一下

离线

#23 2021-10-01 13:04:31

WeepingDogel
狗狗
所在地: 狗窝
注册时间: 2021-07-10
帖子: 7
个人网站

Re: 提問的智慧解決一切

支持一下

离线

#24 2022-02-25 10:18:39

lapollo
会员
注册时间: 2022-02-23
帖子: 1

Re: 提問的智慧解決一切

楼主这个安装教学贴很详细,非常受益,感谢。

pacman -Sy

wiki上说慎用

离线

#25 2022-02-26 17:09:48

kgdpesai
会员
注册时间: 2017-03-06
帖子: 2

Re: 提問的智慧解決一切

谢谢楼主分享!

离线

页脚