Почему ping работает без возможностей и setuid

Это то, что я сделал давным-давно, но это, вероятно, не следует делать так, это невероятно хакерски и неэффективно! :П
По сути, он делает скриншот текущего экрана и сдвигает его в сторону по одному пикселю за раз. (скорость зависит от компьютеров, я думаю.)

У меня есть сценарий bash goto_to_workspace.sh, который запускается каждый раз, когда я меняю рабочую область с помощью этого кода внутри:(сценарий принимает номер аргумента в качестве номера рабочей области, например:goto_to_workspace.sh 4)

WORKSPACE=$1
WKSP=`xprop -root -notype  _NET_CURRENT_DESKTOP | sed 's#.* =##'`
CURRENT_WORKSPACE=`expr 1 + $WKSP`
if [ $CURRENT_WORKSPACE -ne $WORKSPACE ]; then
    scrot -q 50 PRTSRC.jpeg
    feh PRTSRC.jpeg&
    FEH_WINDOW=$!
    #WAIT (give i3 time to switch workspace in the background)
    sleep.2
fi
slide_FEH_LEFT(){
    LONG_LINE="move left 1px"
    for i in {1..11}; do
        LONG_LINE=$LONG_LINE","$LONG_LINE
    done
    i3-msg "[class=feh] $LONG_LINE"
}
slide_FEH_RIGHT(){
    LONG_LINE="move right 1px"
    for i in {1..11}; do
        LONG_LINE=$LONG_LINE","$LONG_LINE
    done
    i3-msg "[class=feh] $LONG_LINE"
}
if [ $CURRENT_WORKSPACE -gt $WORKSPACE ]; then
    slide_FEH_RIGHT
else
    slide_FEH_LEFT
fi
#SIMPLE KILL AFTER 500ms
{ sleep.5 && kill $FEH_WINDOW; } &

РЕДАКТИРОВАТЬ :Более глубокое изучение проблемы. Вместо этого разумнее использовать wmctrl.

Таким образом, выход из строя функции может быть, например,:(для моего экрана 1920x1080)

slide_FEH_DOWN_wmctrl(){
    FEH_ID=`wmctrl -l|grep "PRTSRC.jpeg$"|awk '{print $1}'`
    for (( c=0; c!=1100; c=c+10 )) do
        wmctrl -i -r $FEH_ID -e 1,0,$c,1920,1080
    done
}

Я также пытался сделать что-то быстро с помощью xlib (c или python ), но это менее гладко, чем wmctrl. Так что, если кто-то может сделать это лучше, дайте нам знать.

EDIT2 :Конечно, вам нужно, чтобы feh был липким, например, в вашей конфигурации i3:

for_window [class="feh"] floating enable, sticky enable, border pixel 0, move absolute position 0 px 0 px
2
04.11.2020, 11:04
1 ответ

В недавней системе Linux ping не требует каких-либо привилегий для своей основной операции , которая заключается в отправке сообщений эхо-запроса ICMP и получении ответных сообщений эхо-ответа.

В Ubuntu 20.04 есть две реализации ping. По умолчанию, из iputils -ping , установлен setcap CAP_NET_RAW, но работает для эха ICMP без привилегий. Один из inetutils -ping устанавливается с установленным setuid root, но также работает для эха ICMP без привилегий. Оба используют сокет ICMP, который разрешен без привилегий :

.
socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = 3

Я не могу воспроизвести использование сокета netlink для базовой проверки связи ни в одной из этих реализаций, с привилегиями или без них.

3
18.03.2021, 22:52

Теги

Похожие вопросы