tv xkiller: init

This commit is contained in:
tv 2019-01-07 15:29:48 +01:00
parent 7c84b32f2d
commit e0bbedff27

View File

@ -0,0 +1,25 @@
{ pkgs }:
pkgs.writeDash "xkiller" ''
set -efu
exec >&2
${pkgs.iproute}/bin/ss -lp src unix:/tmp/.X11-unix/X* |
${pkgs.gnused}/bin/sed -n '
s|.*/tmp/.X11-unix/X\([0-9]\+\)\>.*("X[^"]*",pid=\([0-9]\+\)\>.*|\1 \2|p
' |
while read -r display pid; do
{
exit_code=$(
DISPLAY=:$display ${pkgs.coreutils}/bin/timeout 1 \
${pkgs.xorg.xset}/bin/xset q >/dev/null 2>&1 &&
echo 0 || echo $?
)
if test $exit_code = 124; then
echo "X on display :$display is locked up; killing PID $pid..."
${pkgs.coreutils}/bin/kill -SIGKILL "$pid"
else
echo "X on display :$display is healthy"
fi
} &
done
wait
''