сценарий не ведет себя правильно при вызове acpi и udev событиями

Короткий код помощника:

#!/bin/bash
#
# echo cp "$1" ../tmp/"${1//\//_}" 
#
mv "$1" ../tmp/"${1//\//_}"

давайте назовем это 'deslash.sh' и сделаем это исполняемым файлом. Назовите его с:

find -type f -name thumb.png -exec ./deslash.sh {} ";"    

Это перестанет работать, если коллизия будет существовать

a/b/thumb.png # and 
a_b/thumb.png 

но это неизбежно.

4
04.06.2015, 23:11
2 ответа

С помощью парней, которые прокомментировали мой вопрос, я выяснил то, что было неправильным и зафиксировало его в сценарии.

Здесь теперь обновленные стандартные программы, как заставить автоматический экран, переключающийся с Вашим ноутбуком работать. Вам нужны acpid, км/сек и udev.

Создайте следующие правила для acpi и udev

/etc/acpi/events/lidclose

# Pass all events to our one handler script
event=button/lid
action=/etc/acpi/monitors.sh

/etc/udev/rules.d/80-monitor.rules

# change monitor settings when monitor is plugged in or o$
ACTION=="change", SUBSYSTEM=="drm", HOTPLUG=="1", RUN+="/etc/acpi/monitors.sh"

теперь создайте/etc/acpi/monitors.sh

#!/bin/sh

# specify the monitors to use
INTERNAL=LVDS1
EXTERNAL=HDMI3
USERNAME=oli

# set some variables needed to control the x server
export XAUTHORITY=/home/$USERNAME/.Xauthority
export DISPLAY=:0

# functions to switch from internal screen to external screen and vice versa or to use both screens together
function internal {
    echo "Switching to internal" >> /var/log/monitors.log
    xrandr --verbose --output $EXTERNAL --off --output $INTERNAL --auto >> /var/log/monitors.log 2>&1
}
function external {
    echo "Switching to external" >> /var/log/monitors.log
    xrandr --verbose --output $EXTERNAL --auto --output $INTERNAL --off >> /var/log/monitors.log 2>&1
}
function both {
    echo "Switching to both" >> /var/log/monitors.log
    xrandr --verbose --output $EXTERNAL --auto --right-of $INTERNAL --output $INTERNAL --auto --primary >> /var/log/monitors.log 2>&1
}

# functions to check if external monitor is connected and in use
function externalConnected {
    ! xrandr | grep "^$EXTERNAL" | grep disconnected >/dev/null
}
function lidOpen {
    ! cat /proc/acpi/button/lid/LID/state | grep closed >/dev/null
}

# actual script
if externalConnected && lidOpen
then
    both
fi

if externalConnected && ! lidOpen
then
    external
fi

if ! externalConnected && lidOpen
then
    internal
fi

И надо надеяться это будет работать.

7
27.01.2020, 20:51

Решение janoliver работало почти нормально. Одно небольшое исправление, которое, наконец, заработало в моей системе в отношении переменной HOTPLUG:

/etc/udev/rules.d/80-monitor.rules:

# change monitor settings when monitor is plugged in or off
ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/etc/acpi/monitors.sh"

т. е. изменить HOTPLUGна ENV{HOTPLUG}.

0
27.01.2020, 20:51

Теги

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