Просто для удовольствия, используя решение @StephenKitt, вот пример в bash с использованием подключаемого модуля bashctypes.sh (, который должен быть скомпилирован и установлен в /usr/local
для этого примера. ).
К сожалению, обе структуры sigaction
и siginfo_t
слишком сложны для работы встроенной команды struct
ctypes.sh
. Таким образом, эти структуры должны быть определены вручную. Это довольно раздражающая работа, и она не -переносима (как для ОС, так и для архитектуры ). В этом примере предполагается, что Linux >= 4.6 (из-заinfo->si_pkey
)на архитектуре x86 _64.
#!/bin/bash
. /usr/local/bin/ctypes.sh || exit 2
handler () {
local -a info=(int int int int uint32 uint32 int int64 int64 int64 int pointer int int pointer long int short pointer pointer int pointer int unsigned)
unpack $3 info
echo ''
echo "handler($2, info={${info[@]}}, $4);"
echo -- handling signal $2 --
echo "info->si_pid=${info[4]}"
echo "info->si_uid=${info[5]}"
return
}
callback -n handler handler void int pointer pointer
SIGUSR2=12
SA_SIGINFO=4
act=(
$handler
long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0
int:$SA_SIGINFO
pointer:0
)
sizeof_act=$(( 8 + 16 * 8 + 4 + 8 ))
dlcall -n pact -r pointer malloc $sizeof_act
[ $pact != pointer:0 ] || exit 1
pack $pact act
dlcall -n ret -r int sigaction int:$SIGUSR2 $pact pointer:0
[ $ret = int:0 ] || exit 1
echo "sigaction(SIGUSR2, act={${act[@]}}, NULL) = $ret"
echo ''
echo run this: kill -$SIGUSR2 $$
sleep 99
Исполнение:
терм1:
$./siginfo.bash
sigaction(SIGUSR2, act={pointer:0x7ff26f0d3010 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 long:0 int:4 pointer:0}, NULL) = int:0
run this: kill -12 24250
терм2:
$ echo $$
21864
$ id -u
1000
$ kill -12 24250
$
результат в терм1:
handler(int:12, info={int:12 int:0 int:0 int:0 uint32:21864 uint32:1000 int:0 int64:0 int64:0 int64:0 int:0 pointer:0 int:0 int:0 pointer:0 long:0 int:0 short:0 pointer:0 pointer:0 int:0 pointer:0 int:0 unsigned:0}, pointer:0x7fff4583a500);
-- handling signal int:12 --
info->si_pid=uint32:21864
info->si_uid=uint32:1000
Я бы просто использовал ваш полный путь к программе:
terminal = "/full/path/to/alacritty"
У меня нет Ubuntu, но у меня была та же проблема. Это решение сработало для меня:
awful.key({ modkey, }, "Return", function () awful.spawn.with_shell("LIBGL_ALWAYS_SOFTWARE=1 alacritty") end,
{description = "open a terminal", group = "launcher"}),
Ключ
"LIBGL_ALWAYS_SOFTWARE=1 alacritty"
Проблема с GLSL 3.30, с которой я столкнулся, объясняется здесь:https://wiki.archlinux.org/title/Alacritty#Requires_hardware_supporting_GLSL_3.30