mirror of
https://github.com/ksyasuda/rice.git
synced 2024-11-22 03:19:58 -08:00
84 lines
2.7 KiB
Lua
84 lines
2.7 KiB
Lua
|
-- Simple script for configurable TV out activation and/or deactivation on mpv playback
|
||
|
--
|
||
|
-- Intended to activate TV on mpv startup and deactivate TV on mpv close if TV is connected.
|
||
|
-- The script executes fully configurable shell sequences (e.g. xrandr on linux)
|
||
|
-- Can also be used for activating ambient lighting while watching etc ...
|
||
|
--
|
||
|
-- Note: There are implicit security issues due to a nature of direct execution
|
||
|
-- of command line tools without any sanitization ...
|
||
|
--
|
||
|
-- TV configurable options:
|
||
|
-- test ... check if TV is connected (result is non empty, exitcode 0)
|
||
|
-- on ... executed once on mpv player startup (TV ON)
|
||
|
-- off ... executed once on mpv player shutdown (TV OFF)
|
||
|
--
|
||
|
-- Note: xrandr seems to have problem turning off and on devices on single execution.
|
||
|
-- Therefore it is wise to split execution to multiple commands, for example:
|
||
|
-- problem : xrandr --output LVDS1 --off --output TV1 --auto
|
||
|
-- works ok: xrandr --output LVDS1 --off && xrandr --output TV1 --auto
|
||
|
--
|
||
|
-- To customize configuration place tv.conf into ~/.config/mpv/lua-settings/ and edit
|
||
|
--
|
||
|
-- Place script into ~/.config/mpv/scripts/ for autoload
|
||
|
--
|
||
|
-- GitHub: https://github.com/blue-sky-r/mpv/tree/master/scripts
|
||
|
|
||
|
local options = require("mp.options")
|
||
|
local utils = require("mp.utils")
|
||
|
|
||
|
-- defaults
|
||
|
local cfg = {
|
||
|
test = "xrandr | grep 'VGA1 connected'",
|
||
|
on = 'xrandr --output LVDS1 --off && xrandr --output VGA1 --mode 720x400 --output TV1 --auto',
|
||
|
off = 'xrandr --output LVDS1 --auto'
|
||
|
}
|
||
|
|
||
|
-- string v is empty
|
||
|
local function empty(v)
|
||
|
return not v or v == '' or string.find(v,"^%s*$")
|
||
|
end
|
||
|
|
||
|
-- evaluate shell condition by executing cmd
|
||
|
local function test(cmd)
|
||
|
-- return success if there is nothing to test
|
||
|
if empty(cmd) then return true end
|
||
|
-- get only exitcode
|
||
|
local exitcode = io.popen(cmd..' >/dev/null 2>&1; echo $?'):read('*n')
|
||
|
-- log
|
||
|
mp.msg.info("test '" .. cmd .. "' returned exitcode:"..exitcode)
|
||
|
-- success if exitcode is zero
|
||
|
return exitcode == 0
|
||
|
end
|
||
|
|
||
|
-- execute shell cmd
|
||
|
local function exec(cmd)
|
||
|
-- return if there is nothing to execute
|
||
|
if empty(cmd) then return end
|
||
|
-- get stdout and stderr combined
|
||
|
local stdcom = io.popen(cmd..' 2>&1'):read('*all')
|
||
|
-- log
|
||
|
mp.msg.info("exec '" .. cmd .. "'")
|
||
|
if stdcom then mp.msg.verbose(stdcom) end
|
||
|
end
|
||
|
|
||
|
-- read lua-settings/tv.conf
|
||
|
options.read_options(cfg, 'tv')
|
||
|
|
||
|
-- log active config
|
||
|
mp.msg.verbose('cfg = '..utils.to_string(cfg))
|
||
|
|
||
|
-- execute only if test condition
|
||
|
if test(cfg.test) then
|
||
|
-- optional TV.ON execute now
|
||
|
if not empty(cfg.on) then exec(cfg.on) end
|
||
|
|
||
|
-- optional TV.OFF execute on shutdown
|
||
|
if not empty(cfg.off) then
|
||
|
mp.register_event("shutdown",
|
||
|
function()
|
||
|
exec(cfg.off)
|
||
|
end
|
||
|
)
|
||
|
end
|
||
|
end
|