LINUX.ORG.RU

Бинд chvt в i3wm

 , , ,


0

2

Нужно чтобы при нажатии комбинации в i3wm происходило переключение на tty1. Как я понял, команды в i3wm запускаются только через exec, но тогда chvt просто не срабатывает. Есть решение?

Да, ctrl+alt+F1 не катит, хочется что-нибудь на подобии alt+tab.

chvt &>/dev/ttyX </dev/ttyX ?

anonymous ()
Ответ на: комментарий от rmu

Вроде не работает, но стоит проверить на другой команде, а то вдруг не так написал

stripwire ()

Без sudo не будет работать. Чтобы не требовался пароль, нужно добавить разрешение в /etc/sudoers. После этого должно работать.

rassol ()
Ответ на: комментарий от stripwire

Странное у него поведение:
-в sudoers настроил, чтобы работало без sudo
-в терминале на chvt 2 отвечает chvt: ioctl VT_ACTIVATE: Операция не позволена, через sudo срабатывает
-в tty работает без sudo
-в комбинациях клавиш cinnamon работает без sudo

stripwire ()
Ответ на: комментарий от stripwire

Так ты номер терминала, на который переключиться не ввёл.

Я ввожу в иксовом гуёвом терминале: chvt 1 &>/dev/tty1 </dev/tty1

И наблюдаю переключение в консоль ядра.

anonymous ()
Ответ на: комментарий от anonymous
strace $(echo "chvt 2 &>/dev/tty2 </dev/tty2")           
execve("/usr/bin/chvt", ["chvt", "2", "&>/dev/tty2", "</dev/tty2"], 0x7ffd60251738 /* 41 vars */) = 0
brk(NULL)                               = 0x556c18783000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffeecf96600) = -1 EINVAL (Недопустимый аргумент)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (Нет такого файла или каталога)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=217702, ...}) = 0
mmap(NULL, 217702, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fb03cf29000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`r\2\0\0\0\0\0"..., 832) = 832
lseek(3, 64, SEEK_SET)                  = 64
read(3, "\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"..., 784) = 784
lseek(3, 848, SEEK_SET)                 = 848
read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32
lseek(3, 880, SEEK_SET)                 = 880
read(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0z\36*\342l\357PXJ\362\306\nZ\323\247\256"..., 68) = 68
fstat(3, {st_mode=S_IFREG|0755, st_size=2149496, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb03cf27000
lseek(3, 64, SEEK_SET)                  = 64
read(3, "\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"..., 784) = 784
lseek(3, 848, SEEK_SET)                 = 848
read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32
lseek(3, 880, SEEK_SET)                 = 880
read(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0z\36*\342l\357PXJ\362\306\nZ\323\247\256"..., 68) = 68
mmap(NULL, 1860536, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fb03cd60000
mprotect(0x7fb03cd85000, 1671168, PROT_NONE) = 0
mmap(0x7fb03cd85000, 1363968, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25000) = 0x7fb03cd85000
mmap(0x7fb03ced2000, 303104, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x172000) = 0x7fb03ced2000
mmap(0x7fb03cf1d000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bc000) = 0x7fb03cf1d000
mmap(0x7fb03cf23000, 13240, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fb03cf23000
close(3)                                = 0
arch_prctl(ARCH_SET_FS, 0x7fb03cf28540) = 0
mprotect(0x7fb03cf1d000, 12288, PROT_READ) = 0
mprotect(0x556c1708a000, 4096, PROT_READ) = 0
mprotect(0x7fb03cf89000, 4096, PROT_READ) = 0
munmap(0x7fb03cf29000, 217702)          = 0
brk(NULL)                               = 0x556c18783000
brk(0x556c187a4000)                     = 0x556c187a4000
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3039856, ...}) = 0
mmap(NULL, 3039856, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fb03ca79000
close(3)                                = 0
openat(AT_FDCWD, "/proc/self/fd/0", O_RDWR) = 3
ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0x7ffeecf96527)     = -1 ENOTTY (Неприменимый к данному устройству ioctl)
close(3)                                = 0
openat(AT_FDCWD, "/dev/tty", O_RDWR)    = 3
ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0x7ffeecf96527)     = -1 ENOTTY (Неприменимый к данному устройству ioctl)
close(3)                                = 0
openat(AT_FDCWD, "/dev/tty0", O_RDWR)   = -1 EACCES (Отказано в доступе)
openat(AT_FDCWD, "/dev/tty0", O_WRONLY) = 3
ioctl(3, TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, KDGKBTYPE, 0x7ffeecf96527)     = 0
ioctl(3, VT_ACTIVATE, 0x2)              = -1 EPERM (Операция не позволена)
write(2, "chvt: ", 6chvt: )                   = 6
write(2, "ioctl VT_ACTIVATE", 17ioctl VT_ACTIVATE)       = 17
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=2997, ...}) = 0
read(4, "# Locale name alias data base.\n#"..., 4096) = 2997
read(4, "", 4096)                       = 0
close(4)                                = 0
openat(AT_FDCWD, "/usr/share/locale/ru_RU.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (Нет такого файла или каталога)
openat(AT_FDCWD, "/usr/share/locale/ru_RU.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (Нет такого файла или каталога)
openat(AT_FDCWD, "/usr/share/locale/ru_RU/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (Нет такого файла или каталога)
openat(AT_FDCWD, "/usr/share/locale/ru.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (Нет такого файла или каталога)
openat(AT_FDCWD, "/usr/share/locale/ru.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (Нет такого файла или каталога)
openat(AT_FDCWD, "/usr/share/locale/ru/LC_MESSAGES/libc.mo", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=193670, ...}) = 0
mmap(NULL, 193670, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7fb03cf2f000
close(4)                                = 0
openat(AT_FDCWD, "/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = -1 ENOENT (Нет такого файла или каталога)
openat(AT_FDCWD, "/usr/lib/gconv/gconv-modules", O_RDONLY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=56352, ...}) = 0
read(4, "# GNU libc iconv configuration.\n"..., 4096) = 4096
read(4, "1002//\tJUS_I.B1.002//\nmodule\tJUS"..., 4096) = 4096
read(4, "ISO-IR-110//\t\tISO-8859-4//\nalias"..., 4096) = 4096
read(4, "\t\tISO-8859-14//\nalias\tISO_8859-1"..., 4096) = 4096
read(4, "IC-ES//\nalias\tEBCDICES//\t\tEBCDIC"..., 4096) = 4096
read(4, "DIC-CP-ES//\t\tIBM284//\nalias\tCSIB"..., 4096) = 4096
read(4, "\tIBM863//\nalias\tOSF1002035F//\t\tI"..., 4096) = 4096
read(4, "37//\t\tIBM937//\nmodule\tIBM937//\t\t"..., 4096) = 4096
read(4, "JIS//\t\t\tEUC-JP//\nmodule\tEUC-JP//"..., 4096) = 4096
read(4, "ias\tISO2022CN//\t\tISO-2022-CN//\nm"..., 4096) = 4096
read(4, "_5427-EXT//\nalias\tISO_5427EXT//\t"..., 4096) = 4096
brk(0x556c187c5000)                     = 0x556c187c5000
read(4, "st\nmodule\tMAC-SAMI//\t\tINTERNAL\t\t"..., 4096) = 4096
read(4, "12//\t\tINTERNAL\t\tIBM1112\t\t1\nmodul"..., 4096) = 4096
read(4, "\tCP9448//\t\tIBM9448//\nalias\tCSIBM"..., 4096) = 3104
read(4, "", 4096)                       = 0
close(4)                                = 0
write(2, ": \320\236\320\277\320\265\321\200\320\260\321\206\320\270\321\217 \320\275\320\265 \320\277\320\276\320\267\320\262"..., 43: Операция не позволена
) = 43
exit_group(1)                           = ?
+++ exited with 1 +++

stripwire ()
Ответ на: комментарий от anonymous

Добавил в группу tty, но если я авторизован на tty, то я и так владелец:

crw-------  1 stripwire tty         4,   1 окт  8 19:53 tty1
crw--w----  1 root      users       4,  10 окт  8 19:52 tty10
crw--w----  1 root      users       4,  11 окт  8 19:52 tty11
crw--w----  1 root      users       4,  12 окт  8 19:53 tty12
crw--w----  1 root      users       4,  13 окт  8 19:52 tty13
crw--w----  1 root      users       4,  14 окт  8 19:52 tty14
crw--w----  1 root      users       4,  15 окт  8 19:52 tty15
crw--w----  1 root      users       4,  16 окт  8 19:52 tty16
crw--w----  1 root      users       4,  17 окт  8 19:52 tty17
crw--w----  1 root      users       4,  18 окт  8 19:52 tty18
crw--w----  1 root      users       4,  19 окт  8 19:52 tty19
crw-------  1 stripwire tty         4,   2 окт  8 19:53 tty2

stripwire ()
Ответ на: комментарий от stripwire

Что-то я не понял, что у тебя происходит. В /etc/sudoers добавляешь: stripwire ALL=(ALL) NOPASSWD: /usr/bin/chvt. Потом биндишь в конфиге i3: bindsym ... exec sudo chvt 2. Только что проверил — работает.

rassol ()
Ответ на: комментарий от rassol

Но в таком случае он должен запросить пароль. Щас попробую снять пароль с sudo, и посмотрю, сработает ли бинд.

upd* А, там ещё NOPASSWD нужен (не для sudo)

stripwire ()
Ответ на: комментарий от stripwire

В каком плане кривые?

Каждый раз сомневаюсь, что было в оригинале: access denied или operation not permitted. Совершенно разные вещи.

anonymous ()
Ответ на: комментарий от stripwire

Странно, что без nopasswd всё-равно частично работала команда.

В tty работает без sudo, потому что там не требуется такой уровень безопасности, как в иксах.

rassol ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.