
我在我的新筆記本(Lenovo Yoga Pad)上安裝了 Fedora(3.17.2-200.fc20.x86_64),並希望添加此腳本以在我翻轉螢幕時觸發。事件觸發的腳本位於 root/etc/acpi/actions
並由 root 擁有。
問題:當我翻轉螢幕時,除了SELinux 告訴我不同的警告(例如訪問被拒絕,一些關於ioctl 和讀取的內容等,我無法正確回憶起來)之外,什麼也沒發生。它告訴我運行grep tablet_mode.ori /var/log/audit/audit.log | audit2allow -M mypol
並semodule -i mypol.pp
修復它,我這樣做了,但重新啟動後,當我翻轉螢幕時什麼也沒有發生。現在,我刪除了主目錄中的 mypol 文件,因為我認為我可以再次查看 SELinux 輸出。
我現在陷入困境,我害怕在我的 SELinux 中打開安全漏洞,對此的正確解決方案是什麼?有趣的是,當我重新啟動 acpid 並sudo killall acpid && sudo acpid
觸發事件並起作用時,在這種情況下唯一不起作用的是 gsettings 命令,它不會顯示任何錯誤,但不會更改我的用戶(toor)。
這是由事件觸發的腳本:
#!/bin/bash
su toor -c "/home/toor/backup/scripts/toggle_keyboard.sh"
touchpad=$(xinput list-props "SynPS/2 Synaptics TouchPad" | grep "Device Enabled" | awk -F ":" '{print $2}')
if [ $touchpad -eq 1 ]; then
/home/toor/backup/scripts/rotate.sh inverted
xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 0
else
/home/toor/backup/scripts/rotate.sh normal
xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 1
fi
這是rotate.sh:
#!/bin/bash
current_orientation(){
xrandr|grep " connected" |awk '{print $4}'
}
rotate_left(){
xrandr -o left
xsetwacom set "Wacom ISDv4 EC Pen stylus" rotate ccw
xsetwacom set "Wacom ISDv4 EC Pen eraser" rotate ccw
xinput set-prop "ELAN Touchscreen" "Coordinate Transformation Matrix" 0 -1 1 1 0 0 0 0 1
}
rotate_right(){
xrandr -o right
xsetwacom set "Wacom ISDv4 EC Pen stylus" rotate cw
xsetwacom set "Wacom ISDv4 EC Pen eraser" rotate cw
xinput set-prop "ELAN Touchscreen" "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1
}
rotate_inverted(){
xrandr -o inverted
xsetwacom set "Wacom ISDv4 EC Pen stylus" rotate half
xsetwacom set "Wacom ISDv4 EC Pen eraser" rotate half
xinput set-prop "ELAN Touchscreen" "Coordinate Transformation Matrix" -1 0 1 0 -1 1 0 0 1
}
rotate_normal(){
xrandr -o normal
xsetwacom set "Wacom ISDv4 EC Pen stylus" rotate none
xsetwacom set "Wacom ISDv4 EC Pen eraser" rotate none
xinput set-prop "ELAN Touchscreen" "Coordinate Transformation Matrix" 1 0 0 0 1 0 0 0 1
}
orientation=$(current_orientation)
# if the orientation argument was given to this script, sets orientation variable
# according to the way we want to rotate in next loop.
if [ -n "$1" ]; then
if [ "$1" == "normal" ]; then
orientation="right"
fi
if [ "$1" == "left" ]; then
orientation="(normal"
fi
if [ "$1" == "right" ]; then
orientation="inverted"
fi
if [ "$1" == "inverted" ]; then
orientation="left"
fi
fi
# turns 90° counter-clockwise
case $orientation in
"(normal" )
rotate_left
;;
"inverted" )
rotate_right
;;
"right" )
rotate_normal
;;
"left" )
rotate_inverted
;;
* )
echo "it fucked up"
exit 1
;;
esac
exit 0
這將是toggle_keyboard.sh
#!/bin/bash
# toggle onboard keyboard
obk=$(gsettings get org.gnome.desktop.a11y.applications screen-keyboard-enabled)
if [ $obk == 'false' ]; then
gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true
else
gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled false
fi
希望你能幫我解決這個問題,我很感激任何幫助