3

I made a custom ~/.asoundrc on Ubuntu 24.04, but when I run alsamixer I get an error:

ALSA lib conf.c:4123:(config_file_open) cannot access file /home/ruslan/.asoundrc
ALSA lib conf.c:4043:(snd_config_hooks_call) function snd_config_hook_load returned error: Permission denied
ALSA lib conf.c:4650:(snd_config_update_r) hooks failed, removing configuration
cannot open mixer: Permission denied

Trying to figure out what's going on, I tried strace on it:

$ strace -y alsamixer |& grep -B9999 EACCES
execve("/usr/bin/alsamixer", ["alsamixer"], 0x7fff3b1e61a8 /* 34 vars */) = 0
brk(NULL)                               = 0x5c5bfed32000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x79d1d917f000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/home/ruslan/opt/stellarium/lib/glibc-hwcaps/x86-64-v4/libformw.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD</home/ruslan>, "/home/ruslan/opt/stellarium/lib/glibc-hwcaps/x86-64-v4/", 0x7ffef70887b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/home/ruslan/opt/stellarium/lib/glibc-hwcaps/x86-64-v3/libformw.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD</home/ruslan>, "/home/ruslan/opt/stellarium/lib/glibc-hwcaps/x86-64-v3/", 0x7ffef70887b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/home/ruslan/opt/stellarium/lib/glibc-hwcaps/x86-64-v2/libformw.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD</home/ruslan>, "/home/ruslan/opt/stellarium/lib/glibc-hwcaps/x86-64-v2/", 0x7ffef70887b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/home/ruslan/opt/stellarium/lib/libformw.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD</home/ruslan>, "/home/ruslan/opt/stellarium/lib/", 0x7ffef70887b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3</etc/ld.so.cache>
fstat(3</etc/ld.so.cache>, {st_mode=S_IFREG|0644, st_size=161443, ...}) = 0
mmap(NULL, 161443, PROT_READ, MAP_PRIVATE, 3</etc/ld.so.cache>, 0) = 0x79d1d9157000
close(3</etc/ld.so.cache>)              = 0
openat(AT_FDCWD</home/ruslan>, "/lib/x86_64-linux-gnu/libformw.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib/x86_64-linux-gnu/libformw.so.6.5>
read(3</usr/lib/x86_64-linux-gnu/libformw.so.6.5>, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3</usr/lib/x86_64-linux-gnu/libformw.so.6.5>, {st_mode=S_IFREG|0644, st_size=89696, ...}) = 0
mmap(NULL, 91584, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libformw.so.6.5>, 0) = 0x79d1d9140000
mmap(0x79d1d9144000, 57344, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libformw.so.6.5>, 0x4000) = 0x79d1d9144000
mmap(0x79d1d9152000, 12288, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libformw.so.6.5>, 0x12000) = 0x79d1d9152000
mmap(0x79d1d9155000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libformw.so.6.5>, 0x14000) = 0x79d1d9155000
close(3</usr/lib/x86_64-linux-gnu/libformw.so.6.5>) = 0
openat(AT_FDCWD</home/ruslan>, "/lib/x86_64-linux-gnu/libmenuw.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib/x86_64-linux-gnu/libmenuw.so.6.5>
read(3</usr/lib/x86_64-linux-gnu/libmenuw.so.6.5>, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3</usr/lib/x86_64-linux-gnu/libmenuw.so.6.5>, {st_mode=S_IFREG|0644, st_size=47752, ...}) = 0
mmap(NULL, 45408, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libmenuw.so.6.5>, 0) = 0x79d1d9134000
mmap(0x79d1d9137000, 24576, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libmenuw.so.6.5>, 0x3000) = 0x79d1d9137000
mmap(0x79d1d913d000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libmenuw.so.6.5>, 0x9000) = 0x79d1d913d000
mmap(0x79d1d913e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libmenuw.so.6.5>, 0xa000) = 0x79d1d913e000
close(3</usr/lib/x86_64-linux-gnu/libmenuw.so.6.5>) = 0
openat(AT_FDCWD</home/ruslan>, "/lib/x86_64-linux-gnu/libpanelw.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib/x86_64-linux-gnu/libpanelw.so.6.5>
read(3</usr/lib/x86_64-linux-gnu/libpanelw.so.6.5>, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3</usr/lib/x86_64-linux-gnu/libpanelw.so.6.5>, {st_mode=S_IFREG|0644, st_size=22768, ...}) = 0
mmap(NULL, 24592, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libpanelw.so.6.5>, 0) = 0x79d1d912d000
mmap(0x79d1d912f000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libpanelw.so.6.5>, 0x2000) = 0x79d1d912f000
mmap(0x79d1d9131000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libpanelw.so.6.5>, 0x4000) = 0x79d1d9131000
mmap(0x79d1d9132000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libpanelw.so.6.5>, 0x4000) = 0x79d1d9132000
close(3</usr/lib/x86_64-linux-gnu/libpanelw.so.6.5>) = 0
openat(AT_FDCWD</home/ruslan>, "/lib/x86_64-linux-gnu/libncursesw.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib/x86_64-linux-gnu/libncursesw.so.6.5>
read(3</usr/lib/x86_64-linux-gnu/libncursesw.so.6.5>, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3</usr/lib/x86_64-linux-gnu/libncursesw.so.6.5>, {st_mode=S_IFREG|0644, st_size=264584, ...}) = 0
mmap(NULL, 266680, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libncursesw.so.6.5>, 0) = 0x79d1d90eb000
mmap(0x79d1d90f4000, 196608, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libncursesw.so.6.5>, 0x9000) = 0x79d1d90f4000
mmap(0x79d1d9124000, 28672, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libncursesw.so.6.5>, 0x39000) = 0x79d1d9124000
mmap(0x79d1d912b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libncursesw.so.6.5>, 0x3f000) = 0x79d1d912b000
close(3</usr/lib/x86_64-linux-gnu/libncursesw.so.6.5>) = 0
openat(AT_FDCWD</home/ruslan>, "/lib/x86_64-linux-gnu/libtinfo.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib/x86_64-linux-gnu/libtinfo.so.6.5>
read(3</usr/lib/x86_64-linux-gnu/libtinfo.so.6.5>, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3</usr/lib/x86_64-linux-gnu/libtinfo.so.6.5>, {st_mode=S_IFREG|0644, st_size=224792, ...}) = 0
mmap(NULL, 227616, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libtinfo.so.6.5>, 0) = 0x79d1d90b3000
mmap(0x79d1d90c1000, 94208, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libtinfo.so.6.5>, 0xe000) = 0x79d1d90c1000
mmap(0x79d1d90d8000, 57344, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libtinfo.so.6.5>, 0x25000) = 0x79d1d90d8000
mmap(0x79d1d90e6000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libtinfo.so.6.5>, 0x32000) = 0x79d1d90e6000
close(3</usr/lib/x86_64-linux-gnu/libtinfo.so.6.5>) = 0
openat(AT_FDCWD</home/ruslan>, "/lib/x86_64-linux-gnu/libasound.so.2", O_RDONLY|O_CLOEXEC) = 3</usr/lib/x86_64-linux-gnu/libasound.so.2.0.0>
read(3</usr/lib/x86_64-linux-gnu/libasound.so.2.0.0>, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3</usr/lib/x86_64-linux-gnu/libasound.so.2.0.0>, {st_mode=S_IFREG|0644, st_size=1252160, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x79d1d90b1000
mmap(NULL, 1254664, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libasound.so.2.0.0>, 0) = 0x79d1d8f7e000
mmap(0x79d1d8faa000, 778240, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libasound.so.2.0.0>, 0x2c000) = 0x79d1d8faa000
mmap(0x79d1d9068000, 266240, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libasound.so.2.0.0>, 0xea000) = 0x79d1d9068000
mmap(0x79d1d90a9000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libasound.so.2.0.0>, 0x12a000) = 0x79d1d90a9000
close(3</usr/lib/x86_64-linux-gnu/libasound.so.2.0.0>) = 0
openat(AT_FDCWD</home/ruslan>, "/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib/x86_64-linux-gnu/libm.so.6>
read(3</usr/lib/x86_64-linux-gnu/libm.so.6>, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3</usr/lib/x86_64-linux-gnu/libm.so.6>, {st_mode=S_IFREG|0644, st_size=1010032, ...}) = 0
mmap(NULL, 1007640, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libm.so.6>, 0) = 0x79d1d8e87000
mmap(0x79d1d8e98000, 548864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libm.so.6>, 0x11000) = 0x79d1d8e98000
mmap(0x79d1d8f1e000, 385024, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libm.so.6>, 0x97000) = 0x79d1d8f1e000
mmap(0x79d1d8f7c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libm.so.6>, 0xf5000) = 0x79d1d8f7c000
close(3</usr/lib/x86_64-linux-gnu/libm.so.6>) = 0
openat(AT_FDCWD</home/ruslan>, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib/x86_64-linux-gnu/libc.so.6>
read(3</usr/lib/x86_64-linux-gnu/libc.so.6>, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\247\2\0\0\0\0\0"..., 832) = 832
pread64(3</usr/lib/x86_64-linux-gnu/libc.so.6>, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 840, 64) = 840
fstat(3</usr/lib/x86_64-linux-gnu/libc.so.6>, {st_mode=S_IFREG|0755, st_size=2178688, ...}) = 0
pread64(3</usr/lib/x86_64-linux-gnu/libc.so.6>, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 840, 64) = 840
mmap(NULL, 2223736, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libc.so.6>, 0) = 0x79d1d8c00000
mmap(0x79d1d8c28000, 1658880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libc.so.6>, 0x28000) = 0x79d1d8c28000
mmap(0x79d1d8dbd000, 323584, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libc.so.6>, 0x1bd000) = 0x79d1d8dbd000
mmap(0x79d1d8e0c000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib/x86_64-linux-gnu/libc.so.6>, 0x20b000) = 0x79d1d8e0c000
mmap(0x79d1d8e12000, 52856, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x79d1d8e12000
close(3</usr/lib/x86_64-linux-gnu/libc.so.6>) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x79d1d8e85000
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x79d1d8e82000
arch_prctl(ARCH_SET_FS, 0x79d1d8e82740) = 0
set_tid_address(0x79d1d8e82a10)         = 4570
set_robust_list(0x79d1d8e82a20, 24)     = 0
rseq(0x79d1d8e82680, 0x20, 0, 0x53053053) = 0
mprotect(0x79d1d8e0c000, 16384, PROT_READ) = 0
mprotect(0x79d1d8f7c000, 4096, PROT_READ) = 0
mprotect(0x79d1d90a9000, 28672, PROT_READ) = 0
mprotect(0x79d1d90e6000, 16384, PROT_READ) = 0
mprotect(0x79d1d912b000, 4096, PROT_READ) = 0
mprotect(0x79d1d9132000, 4096, PROT_READ) = 0
mprotect(0x79d1d913e000, 4096, PROT_READ) = 0
mprotect(0x79d1d9155000, 4096, PROT_READ) = 0
mprotect(0x5c5beeb99000, 4096, PROT_READ) = 0
mprotect(0x79d1d91c1000, 8192, PROT_READ) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
munmap(0x79d1d9157000, 161443)          = 0
ioctl(0</dev/pts/2>, TCGETS, {c_iflag=ICRNL|IXON|IXOFF|IUTF8, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST|ONLCR, c_cflag=B38400|CS8|CREAD, c_lflag=ISIG|ICANON|ECHO|ECHOE|ECHOK|IEXTEN|ECHOCTL|ECHOKE, ...}) = 0
getrandom("\xac\x82\xd2\x45\x72\xc4\xc0\xee", 8, GRND_NONBLOCK) = 8
brk(NULL)                               = 0x5c5bfed32000
brk(0x5c5bfed53000)                     = 0x5c5bfed53000
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3</etc/locale.alias>
fstat(3</etc/locale.alias>, {st_mode=S_IFREG|0644, st_size=2996, ...}) = 0
read(3</etc/locale.alias>, "# Locale name alias data base.\n#"..., 4096) = 2996
read(3</etc/locale.alias>, "", 4096)    = 0
close(3</etc/locale.alias>)             = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION>
fstat(3</usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION>, {st_mode=S_IFREG|0644, st_size=373, ...}) = 0
mmap(NULL, 373, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION>, 0) = 0x79d1d917e000
close(3</usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY|O_CLOEXEC) = 3</usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache>
fstat(3</usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache>, {st_mode=S_IFREG|0644, st_size=27028, ...}) = 0
mmap(NULL, 27028, PROT_READ, MAP_SHARED, 3</usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache>, 0) = 0x79d1d9177000
close(3</usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache>) = 0
futex(0x79d1d8e1172c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/C.utf8/LC_MEASUREMENT>
fstat(3</usr/lib/locale/C.utf8/LC_MEASUREMENT>, {st_mode=S_IFREG|0644, st_size=23, ...}) = 0
mmap(NULL, 23, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/C.utf8/LC_MEASUREMENT>, 0) = 0x79d1d9176000
close(3</usr/lib/locale/C.utf8/LC_MEASUREMENT>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_TELEPHONE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_TELEPHONE", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/cy_GB.utf8/LC_TELEPHONE>
fstat(3</usr/lib/locale/cy_GB.utf8/LC_TELEPHONE>, {st_mode=S_IFREG|0644, st_size=56, ...}) = 0
mmap(NULL, 56, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/cy_GB.utf8/LC_TELEPHONE>, 0) = 0x79d1d9175000
close(3</usr/lib/locale/cy_GB.utf8/LC_TELEPHONE>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_ADDRESS", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_ADDRESS", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/en_GB.utf8/LC_ADDRESS>
fstat(3</usr/lib/locale/en_GB.utf8/LC_ADDRESS>, {st_mode=S_IFREG|0644, st_size=158, ...}) = 0
mmap(NULL, 158, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/en_GB.utf8/LC_ADDRESS>, 0) = 0x79d1d9174000
close(3</usr/lib/locale/en_GB.utf8/LC_ADDRESS>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_NAME", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_NAME", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/bi_VU/LC_NAME>
fstat(3</usr/lib/locale/bi_VU/LC_NAME>, {st_mode=S_IFREG|0644, st_size=77, ...}) = 0
mmap(NULL, 77, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/bi_VU/LC_NAME>, 0) = 0x79d1d9173000
close(3</usr/lib/locale/bi_VU/LC_NAME>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_PAPER", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_PAPER", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/C.utf8/LC_PAPER>
fstat(3</usr/lib/locale/C.utf8/LC_PAPER>, {st_mode=S_IFREG|0644, st_size=34, ...}) = 0
mmap(NULL, 34, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/C.utf8/LC_PAPER>, 0) = 0x79d1d9172000
close(3</usr/lib/locale/C.utf8/LC_PAPER>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/en_GB.utf8/LC_MESSAGES>
fstat(3</usr/lib/locale/en_GB.utf8/LC_MESSAGES>, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
close(3</usr/lib/locale/en_GB.utf8/LC_MESSAGES>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/en_AG/LC_MESSAGES/SYS_LC_MESSAGES>
fstat(3</usr/lib/locale/en_AG/LC_MESSAGES/SYS_LC_MESSAGES>, {st_mode=S_IFREG|0644, st_size=57, ...}) = 0
mmap(NULL, 57, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/en_AG/LC_MESSAGES/SYS_LC_MESSAGES>, 0) = 0x79d1d9171000
close(3</usr/lib/locale/en_AG/LC_MESSAGES/SYS_LC_MESSAGES>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_MONETARY", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_MONETARY", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/cy_GB.utf8/LC_MONETARY>
fstat(3</usr/lib/locale/cy_GB.utf8/LC_MONETARY>, {st_mode=S_IFREG|0644, st_size=290, ...}) = 0
mmap(NULL, 290, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/cy_GB.utf8/LC_MONETARY>, 0) = 0x79d1d9170000
close(3</usr/lib/locale/cy_GB.utf8/LC_MONETARY>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_COLLATE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_COLLATE", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/aa_DJ.utf8/LC_COLLATE>
fstat(3</usr/lib/locale/aa_DJ.utf8/LC_COLLATE>, {st_mode=S_IFREG|0644, st_size=2586930, ...}) = 0
mmap(NULL, 2586930, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/aa_DJ.utf8/LC_COLLATE>, 0) = 0x79d1d8800000
close(3</usr/lib/locale/aa_DJ.utf8/LC_COLLATE>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_TIME", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_TIME", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/en_GB.utf8/LC_TIME>
fstat(3</usr/lib/locale/en_GB.utf8/LC_TIME>, {st_mode=S_IFREG|0644, st_size=3332, ...}) = 0
mmap(NULL, 3332, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/en_GB.utf8/LC_TIME>, 0) = 0x79d1d916f000
close(3</usr/lib/locale/en_GB.utf8/LC_TIME>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/aa_ET/LC_NUMERIC>
fstat(3</usr/lib/locale/aa_ET/LC_NUMERIC>, {st_mode=S_IFREG|0644, st_size=54, ...}) = 0
mmap(NULL, 54, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/aa_ET/LC_NUMERIC>, 0) = 0x79d1d916e000
close(3</usr/lib/locale/aa_ET/LC_NUMERIC>) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.UTF-8/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD</home/ruslan>, "/usr/lib/locale/en_GB.utf8/LC_CTYPE", O_RDONLY|O_CLOEXEC) = 3</usr/lib/locale/C.utf8/LC_CTYPE>
fstat(3</usr/lib/locale/C.utf8/LC_CTYPE>, {st_mode=S_IFREG|0644, st_size=367708, ...}) = 0
mmap(NULL, 367708, PROT_READ, MAP_PRIVATE, 3</usr/lib/locale/C.utf8/LC_CTYPE>, 0) = 0x79d1d8e28000
close(3</usr/lib/locale/C.utf8/LC_CTYPE>) = 0
futex(0x79d1d90b04c0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
newfstatat(AT_FDCWD</home/ruslan>, "/usr/share/alsa/alsa.conf", {st_mode=S_IFREG|0644, st_size=10117, ...}, 0) = 0
openat(AT_FDCWD</home/ruslan>, "/usr/share/alsa/alsa.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf>
fstat(3</usr/share/alsa/alsa.conf>, {st_mode=S_IFREG|0644, st_size=10117, ...}) = 0
read(3</usr/share/alsa/alsa.conf>, "#\n#  ALSA library configuration "..., 4096) = 4096
read(3</usr/share/alsa/alsa.conf>, "hint.extended\n\t\t}\n\t\tdescription "..., 4096) = 4096
read(3</usr/share/alsa/alsa.conf>, "e\n#\n\nhwdep.default {\n\ttype hw\n\tc"..., 4096) = 1925
read(3</usr/share/alsa/alsa.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf>)     = 0
access("/var/lib/alsa/conf.d", R_OK)    = -1 ENOENT (No such file or directory)
access("/usr/etc/alsa/conf.d", R_OK)    = -1 ENOENT (No such file or directory)
access("/etc/alsa/conf.d", R_OK)        = 0
newfstatat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3</etc/alsa/conf.d>
fstat(3</etc/alsa/conf.d>, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
getdents64(3</etc/alsa/conf.d>, 0x5c5bfed4a880 /* 15 entries */, 32768) = 568
getdents64(3</etc/alsa/conf.d>, 0x5c5bfed4a880 /* 0 entries */, 32768) = 0
close(3</etc/alsa/conf.d>)              = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/10-rate-lav.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/10-rate-lav.conf>
fstat(3</usr/share/alsa/alsa.conf.d/10-rate-lav.conf>, {st_mode=S_IFREG|0644, st_size=425, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/10-rate-lav.conf>, "pcm.lavrate {\n\t@args [ SLAVE RAT"..., 4096) = 425
read(3</usr/share/alsa/alsa.conf.d/10-rate-lav.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/10-rate-lav.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/10-samplerate.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/10-samplerate.conf>
fstat(3</usr/share/alsa/alsa.conf.d/10-samplerate.conf>, {st_mode=S_IFREG|0644, st_size=429, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/10-samplerate.conf>, "pcm.samplerate {\n\t@args [ SLAVE "..., 4096) = 429
read(3</usr/share/alsa/alsa.conf.d/10-samplerate.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/10-samplerate.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/10-speexrate.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/10-speexrate.conf>
fstat(3</usr/share/alsa/alsa.conf.d/10-speexrate.conf>, {st_mode=S_IFREG|0644, st_size=424, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/10-speexrate.conf>, "pcm.speexrate {\n\t@args [ SLAVE R"..., 4096) = 424
read(3</usr/share/alsa/alsa.conf.d/10-speexrate.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/10-speexrate.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/50-arcam-av-ctl.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/50-arcam-av-ctl.conf>
fstat(3</usr/share/alsa/alsa.conf.d/50-arcam-av-ctl.conf>, {st_mode=S_IFREG|0644, st_size=222, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/50-arcam-av-ctl.conf>, "ctl.arcam_av {\n\t@args [ PORT ]\n\t"..., 4096) = 222
read(3</usr/share/alsa/alsa.conf.d/50-arcam-av-ctl.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/50-arcam-av-ctl.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/50-jack.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/50-jack.conf>
fstat(3</usr/share/alsa/alsa.conf.d/50-jack.conf>, {st_mode=S_IFREG|0644, st_size=264, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/50-jack.conf>, "pcm.jack {\n\ttype jack\n\tplayback_"..., 4096) = 264
read(3</usr/share/alsa/alsa.conf.d/50-jack.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/50-jack.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/50-oss.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/50-oss.conf>
fstat(3</usr/share/alsa/alsa.conf.d/50-oss.conf>, {st_mode=S_IFREG|0644, st_size=328, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/50-oss.conf>, "pcm.oss {\n\t@args [ DEVICE ]\n\t@ar"..., 4096) = 328
read(3</usr/share/alsa/alsa.conf.d/50-oss.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/50-oss.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/50-pulseaudio.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/50-pulseaudio.conf>
fstat(3</usr/share/alsa/alsa.conf.d/50-pulseaudio.conf>, {st_mode=S_IFREG|0644, st_size=402, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/50-pulseaudio.conf>, "# Add a specific named PulseAudi"..., 4096) = 402
read(3</usr/share/alsa/alsa.conf.d/50-pulseaudio.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/50-pulseaudio.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/60-a52-encoder.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/60-a52-encoder.conf>
fstat(3</usr/share/alsa/alsa.conf.d/60-a52-encoder.conf>, {st_mode=S_IFREG|0644, st_size=808, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/60-a52-encoder.conf>, "pcm.a52 {\n\t@args [ CARD SLAVE RA"..., 4096) = 808
read(3</usr/share/alsa/alsa.conf.d/60-a52-encoder.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/60-a52-encoder.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/60-speex.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/60-speex.conf>
fstat(3</usr/share/alsa/alsa.conf.d/60-speex.conf>, {st_mode=S_IFREG|0644, st_size=1030, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/60-speex.conf>, "pcm.speex {\n\t@args [ SLAVE AGC A"..., 4096) = 1030
brk(0x5c5bfed74000)                     = 0x5c5bfed74000
read(3</usr/share/alsa/alsa.conf.d/60-speex.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/60-speex.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/60-upmix.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/60-upmix.conf>
fstat(3</usr/share/alsa/alsa.conf.d/60-upmix.conf>, {st_mode=S_IFREG|0644, st_size=389, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/60-upmix.conf>, "pcm.upmix {\n\t@args [ SLAVE CHANN"..., 4096) = 389
read(3</usr/share/alsa/alsa.conf.d/60-upmix.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/60-upmix.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/60-vdownmix.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/60-vdownmix.conf>
fstat(3</usr/share/alsa/alsa.conf.d/60-vdownmix.conf>, {st_mode=S_IFREG|0644, st_size=393, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/60-vdownmix.conf>, "pcm.vdownmix {\n\t@args [ SLAVE CH"..., 4096) = 393
read(3</usr/share/alsa/alsa.conf.d/60-vdownmix.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/60-vdownmix.conf>) = 0
openat(AT_FDCWD</home/ruslan>, "/etc/alsa/conf.d/98-usb-stream.conf", O_RDONLY) = 3</usr/share/alsa/alsa.conf.d/98-usb-stream.conf>
fstat(3</usr/share/alsa/alsa.conf.d/98-usb-stream.conf>, {st_mode=S_IFREG|0644, st_size=395, ...}) = 0
read(3</usr/share/alsa/alsa.conf.d/98-usb-stream.conf>, "pcm.usbstream {\n\t@args [ CARD RA"..., 4096) = 395
read(3</usr/share/alsa/alsa.conf.d/98-usb-stream.conf>, "", 4096) = 0
close(3</usr/share/alsa/alsa.conf.d/98-usb-stream.conf>) = 0
access("/etc/asound.conf", R_OK)        = -1 ENOENT (No such file or directory)
access("/usr/etc/asound.conf", R_OK)    = -1 ENOENT (No such file or directory)
access("/home/ruslan/.asoundrc", R_OK)  = 0
newfstatat(AT_FDCWD</home/ruslan>, "/home/ruslan/.asoundrc", {st_mode=S_IFREG|0664, st_size=40, ...}, 0) = 0
openat(AT_FDCWD</home/ruslan>, "/home/ruslan/.asoundrc", O_RDONLY) = -1 EACCES (Permission denied)

So the program is trying to open the file, getting a "Permission denied" error. But the file is accessible:

$ cat /home/ruslan/.asoundrc
pcm.!default {
    type hw
    card 2
}
$ lsattr /home/ruslan/.asoundrc
--------------e------- /home/ruslan/.asoundrc

Also, alsamixer doesn't appear to have any weird properties like setuid or anything:

$ type alsamixer
alsamixer is /usr/bin/alsamixer
$ ls -lh /usr/bin/alsamixer
-rwxr-xr-x 1 root root 101K Feb 11  2025 /usr/bin/alsamixer

And stopping the program at the __fopen_internal of the file being opened (just in case something locks the file by this point of execution) still lets me cat it as shown above.

So what could be happening here? Why does opening for reading of a perfectly accessible file result in a "Permission denied" error?

1
  • 4
    AppArmor possibly... Check your system logs, they might have relevant information. Commented 22 hours ago

1 Answer 1

7

As @StephenKitt hinted in a comment, the culprit is indeed AppArmor. This can be seen by the line in /var/log/kern.log:

2025-12-07T22:22:50.576740+08:00 machine-name kernel: audit: type=1400 audit(1765117370.573:218): apparmor="DENIED" operation="open" class="file" profile="alsamixer" name="/home/ruslan/.asoundrc" pid=5064 comm="alsamixer" requested_mask="r" denied_mask="r" fsuid=1000 ouid=1000

Although there exists /etc/apparmor.d/abstractions/audio that contains entries

/etc/asound.conf r,
owner @{HOME}/.asoundrc r,

it appears that alsamixer has a dedicated config, /etc/apparmor.d/alsamixer that doesn't have these entries (which looks like a mistake by the creators of the config). Adding the missing entries to the profile and running

sudo apparmor_parser -r /etc/apparmor.d/alsamixer

lets alsamixer run without issues (and strace confirms that the file is successfully opened).

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.