softhddevice-vpp is newer
This commit is contained in:
commit
b6dfc4e737
4684
Manual.html
4684
Manual.html
File diff suppressed because it is too large
Load Diff
2895
Manual.org
2895
Manual.org
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,8 @@
|
|||||||
|
---
|
||||||
# file: group_vars/all
|
# file: group_vars/all
|
||||||
|
|
||||||
# this is the standard text to put in templates
|
# this is the standard text to put in templates
|
||||||
ansible_managed_file: "*** YAVDR: ANSIBLE MANAGED FILE ***"
|
ansible_managed_file: "*** YAVDR: ANSIBLE MANAGED FILE ***"
|
||||||
|
|
||||||
branch: unstable
|
branch: unstable
|
||||||
ppa_owner: 'ppa:yavdr'
|
ppa_owner: 'ppa:yavdr'
|
||||||
# a list of all package repositories to be added to the installation
|
# a list of all package repositories to be added to the installation
|
||||||
@ -12,7 +12,6 @@ repositories:
|
|||||||
- '{{ ppa_owner }}/{{branch}}-vdr'
|
- '{{ ppa_owner }}/{{branch}}-vdr'
|
||||||
- '{{ ppa_owner }}/{{branch}}-yavdr'
|
- '{{ ppa_owner }}/{{branch}}-yavdr'
|
||||||
- '{{ ppa_owner }}/{{branch}}-kodi'
|
- '{{ ppa_owner }}/{{branch}}-kodi'
|
||||||
|
|
||||||
# properties of the user vdr and vdr-related options
|
# properties of the user vdr and vdr-related options
|
||||||
vdr:
|
vdr:
|
||||||
user: vdr
|
user: vdr
|
||||||
@ -20,6 +19,7 @@ vdr:
|
|||||||
uid: 666
|
uid: 666
|
||||||
gid: 666
|
gid: 666
|
||||||
home: /var/lib/vdr
|
home: /var/lib/vdr
|
||||||
|
confdir: /var/lib/vdr
|
||||||
recdir: /srv/vdr/video
|
recdir: /srv/vdr/video
|
||||||
hide_first_recording_level: false
|
hide_first_recording_level: false
|
||||||
safe_dirnames: true # escape characters (useful for windows clients and FAT/NTFS file systems)
|
safe_dirnames: true # escape characters (useful for windows clients and FAT/NTFS file systems)
|
||||||
@ -40,21 +40,19 @@ media_dirs:
|
|||||||
files: /srv/files
|
files: /srv/files
|
||||||
backups: /srv/backups
|
backups: /srv/backups
|
||||||
recordings: '{{ vdr.recdir }}'
|
recordings: '{{ vdr.recdir }}'
|
||||||
|
|
||||||
nfs:
|
nfs:
|
||||||
insecure: false # set to true for OS X clients or if you plan to use libnfs as unprivileged user (e.g. KODI)
|
insecure: false # set to true for OS X clients or if you plan to use libnfs as unprivileged user (e.g. KODI)
|
||||||
|
|
||||||
samba:
|
samba:
|
||||||
workgroup: YAVDR
|
workgroup: YAVDR
|
||||||
windows_compatible: '{{ vdr.safe_dirnames }}' # set to true to disable unix extensions, enable follow symlinks and wide links
|
windows_compatible: '{{ vdr.safe_dirnames }}' # set to true to disable unix extensions, enable follow symlinks and wide links
|
||||||
|
|
||||||
# additional packages you want to install
|
# additional packages you want to install
|
||||||
extra_packages:
|
extra_packages:
|
||||||
- vim
|
- vim
|
||||||
|
- htop
|
||||||
- tree
|
- tree
|
||||||
- w-scan
|
- w-scan
|
||||||
|
- bpython
|
||||||
- bpython3
|
- bpython3
|
||||||
|
|
||||||
#system:
|
#system:
|
||||||
# shutdown: poweroff
|
# shutdown: poweroff
|
||||||
grub:
|
grub:
|
||||||
|
58
library/hardware_facts.py
Normal file → Executable file
58
library/hardware_facts.py
Normal file → Executable file
@ -1,19 +1,18 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env/python
|
||||||
|
|
||||||
# This Module collects the vendor- and device ids for USB- and PCI(e)-devices and currently loaded kernel modules.
|
# This Module collects the vendor- and device ids for USB- and PCI(e)-devices and currently loaded kernel modules.
|
||||||
DOCUMENTATION = '''
|
DOCUMENTATION = '''
|
||||||
---
|
---
|
||||||
module: hardware_facts
|
module: hardware_facts
|
||||||
short_description: collects facts for kernel modules, usb and pci devices
|
short_description: collects facts for kernel modules, usb and pci devices
|
||||||
description:
|
description:
|
||||||
- This Module collects the vendor- and device ids for USB- and PCI(e)-devices and
|
- This Module collects the vendor- and device ids for USB- and PCI(e)-devices and
|
||||||
currently loaded kernel modules.
|
currently loaded kernel modules.
|
||||||
options:
|
options:
|
||||||
usb:
|
usb:
|
||||||
required: False
|
required: False
|
||||||
default: True
|
default: True
|
||||||
description:
|
description:
|
||||||
- return a list of vendor- and device ids for usb devices in '04x:04x' notation
|
- return a list of vendor- and device ids for usb devices in '04x:04x' notation
|
||||||
|
|
||||||
pci:
|
pci:
|
||||||
required: False
|
required: False
|
||||||
@ -65,17 +64,27 @@ import kmodpy
|
|||||||
from ansible.module_utils.basic import *
|
from ansible.module_utils.basic import *
|
||||||
|
|
||||||
|
|
||||||
PCIDevice = namedtuple("PCIDevice", ['idVendor', 'idProduct', 'idClass'])
|
PCIDevice = namedtuple("PCIDevice", 'idVendor idProduct idClass pciPath')
|
||||||
|
|
||||||
|
vendor_dict = {
|
||||||
|
0x10de: 'nvidia',
|
||||||
|
0x8086: 'intel',
|
||||||
|
0x1002: 'amd',
|
||||||
|
0x80ee: 'virtualbox',
|
||||||
|
}
|
||||||
|
|
||||||
def get_pci_devices():
|
def get_pci_devices():
|
||||||
for device in glob.glob('/sys/devices/pci*/*:*:*/'):
|
for device in glob.glob('/sys/devices/pci*/*:*:*/*:*:*/'):
|
||||||
with open(os.path.join(device, 'device')) as d:
|
try:
|
||||||
product_id = int(d.read().strip(), 16)
|
with open(os.path.join(device, 'device')) as d:
|
||||||
with open(os.path.join(device, 'vendor')) as d:
|
product_id = int(d.read().strip(), 16)
|
||||||
vendor_id = int(d.read().strip(), 16)
|
with open(os.path.join(device, 'vendor')) as d:
|
||||||
with open(os.path.join(device, 'class')) as d:
|
vendor_id = int(d.read().strip(), 16)
|
||||||
class_id = int(d.read().strip(), 16)
|
with open(os.path.join(device, 'class')) as d:
|
||||||
yield PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id)
|
class_id = int(d.read().strip(), 16)
|
||||||
|
yield PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id, pciPath=device)
|
||||||
|
except IOError:
|
||||||
|
pass
|
||||||
|
|
||||||
def format_device_list(iterator):
|
def format_device_list(iterator):
|
||||||
return ["{:04x}:{:04x}".format(d.idVendor, d.idProduct) for d in iterator]
|
return ["{:04x}:{:04x}".format(d.idVendor, d.idProduct) for d in iterator]
|
||||||
@ -84,7 +93,8 @@ def format_gpu_device_list(iterator):
|
|||||||
def get_entries(iterator):
|
def get_entries(iterator):
|
||||||
for d in iterator:
|
for d in iterator:
|
||||||
if d.idClass == 0x030000:
|
if d.idClass == 0x030000:
|
||||||
yield ("{:04x}:{:04x}".format(d.idVendor, d.idProduct))
|
yield {"VendorName": vendor_dict.get(d.idVendor, "unknown"),
|
||||||
|
"VendorID": d.idVendor, "ProductID": d.idProduct}
|
||||||
return [entry for entry in get_entries(iterator)]
|
return [entry for entry in get_entries(iterator)]
|
||||||
|
|
||||||
arg_specs = {
|
arg_specs = {
|
||||||
|
1
library/satip_facts.py
Normal file → Executable file
1
library/satip_facts.py
Normal file → Executable file
@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python2
|
#!/usr/bin/env python2
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
DOCUMENTATION = '''
|
||||||
---
|
---
|
||||||
module: hardware_facts
|
module: hardware_facts
|
||||||
|
89
library/xrandr_facts.py
Normal file → Executable file
89
library/xrandr_facts.py
Normal file → Executable file
@ -2,6 +2,7 @@
|
|||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import ast
|
import ast
|
||||||
import binascii
|
import binascii
|
||||||
|
import csv
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
@ -22,11 +23,6 @@ options:
|
|||||||
default: ":0"
|
default: ":0"
|
||||||
description:
|
description:
|
||||||
- the DISPLAY variable to use when calling xrandr
|
- the DISPLAY variable to use when calling xrandr
|
||||||
multi_display:
|
|
||||||
required: False
|
|
||||||
default: "False"
|
|
||||||
description:
|
|
||||||
- check additional screens (:0.0 .. :0.n) until xrandr fails to collect information
|
|
||||||
preferred_outpus:
|
preferred_outpus:
|
||||||
required: False
|
required: False
|
||||||
default: ["HDMI", "DP", "DVI", "VGA", "TV": 0]
|
default: ["HDMI", "DP", "DVI", "VGA", "TV": 0]
|
||||||
@ -42,6 +38,11 @@ options:
|
|||||||
default: ["7680x4320", "3840x2160", "1920x1080", "1280x720", "720x576"]
|
default: ["7680x4320", "3840x2160", "1920x1080", "1280x720", "720x576"]
|
||||||
description:
|
description:
|
||||||
- ranking of the preferred display resolutions
|
- ranking of the preferred display resolutions
|
||||||
|
write_edids:
|
||||||
|
required: False
|
||||||
|
default: True
|
||||||
|
description:
|
||||||
|
- write edid data to /etc/X11/edid.{connector}.bin
|
||||||
'''
|
'''
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
- name: "collect facts for connected displays"
|
- name: "collect facts for connected displays"
|
||||||
@ -50,11 +51,13 @@ EXAMPLES = '''
|
|||||||
|
|
||||||
- debug:
|
- debug:
|
||||||
var: xrandr
|
var: xrandr
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
var: xorg
|
||||||
'''
|
'''
|
||||||
|
|
||||||
ARG_SPECS = {
|
ARG_SPECS = {
|
||||||
'display': dict(default=":0", type='str', required=False),
|
'display': dict(default=":0", type='str', required=False),
|
||||||
'multi_display': dict(default=False, type='bool', required=False),
|
|
||||||
'preferred_outputs': dict(
|
'preferred_outputs': dict(
|
||||||
default=["HDMI", "DP", "DVI", "VGA", "TV"], type='list', required=False),
|
default=["HDMI", "DP", "DVI", "VGA", "TV"], type='list', required=False),
|
||||||
'preferred_refreshrates': dict(
|
'preferred_refreshrates': dict(
|
||||||
@ -168,6 +171,45 @@ def parse_xrandr_verbose(iterator):
|
|||||||
break
|
break
|
||||||
return xorg
|
return xorg
|
||||||
|
|
||||||
|
def parse_edid_data(edid):
|
||||||
|
vendor = "Unknown"
|
||||||
|
model = "Unknown"
|
||||||
|
data = subprocess.check_output("parse-edid < {}".format(edid), shell=True, universal_newlines=True)
|
||||||
|
for line in data.splitlines():
|
||||||
|
if "VendorName" in line:
|
||||||
|
vendor = line.strip().split('"')[1]
|
||||||
|
if "ModelName" in line:
|
||||||
|
model = line.strip().split('"')[1]
|
||||||
|
return vendor, model
|
||||||
|
|
||||||
|
def collect_nvidia_data():
|
||||||
|
BusID_RE = re.compile((
|
||||||
|
'(?P<domain>[0-9a-fA-F]+)'
|
||||||
|
':'
|
||||||
|
'(?P<bus>[0-9a-fA-F]+)'
|
||||||
|
':'
|
||||||
|
'(?P<device>[0-9a-fA-F]+)'
|
||||||
|
'\.'
|
||||||
|
'(?P<function>[0-9a-fA-F]+)'
|
||||||
|
))
|
||||||
|
try:
|
||||||
|
data = subprocess.check_output(["nvidia-smi", "--query-gpu=name,pci.bus_id", "--format=csv", "-i0"],
|
||||||
|
universal_newlines=True)
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
for row in csv.DictReader(data.splitlines(), delimiter=',', skipinitialspace=True):
|
||||||
|
name = row['name']
|
||||||
|
bus_id = row['pci.bus_id']
|
||||||
|
# pci.bus_id structure as reported by nvidia-smi: "domain:bus:device.function", in hex.
|
||||||
|
match = BusID_RE.search(bus_id)
|
||||||
|
if match:
|
||||||
|
domain, bus, device, function = (int(n, 16) for n in match.groups())
|
||||||
|
bus_id = "PCI:{:d}@{:d}:{:d}:{:d}".format(bus, domain, device, function)
|
||||||
|
return name, bus_id
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
|
||||||
def output_data(data, write_edids=True):
|
def output_data(data, write_edids=True):
|
||||||
if data:
|
if data:
|
||||||
modes = []
|
modes = []
|
||||||
@ -180,11 +222,40 @@ def output_data(data, write_edids=True):
|
|||||||
for refreshrate in refreshrates:
|
for refreshrate in refreshrates:
|
||||||
modes.append(Mode(connector, resolution, refreshrate))
|
modes.append(Mode(connector, resolution, refreshrate))
|
||||||
if modes:
|
if modes:
|
||||||
best_mode = max(modes, key=sort_mode)
|
result = {}
|
||||||
data['best_tv_mode'] = best_mode
|
try:
|
||||||
|
gpu_name, bus_id = collect_nvidia_data()
|
||||||
|
except ValueError:
|
||||||
|
gpu_name = None
|
||||||
|
bus_id = None
|
||||||
|
|
||||||
|
def create_entry(my_dict, name, connector, resolution, refreshrate, vendor, model):
|
||||||
|
my_dict[name] = {
|
||||||
|
'connector': connector,
|
||||||
|
'resolution': resolution,
|
||||||
|
'refreshrate': refreshrate,
|
||||||
|
'edid': '/etc/X11/edid.{}.bin'.format(connector),
|
||||||
|
'mode': "{}_{}".format(resolution, refreshrate),
|
||||||
|
'vendor': vendor,
|
||||||
|
'model': model,
|
||||||
|
}
|
||||||
|
if gpu_name and bus_id:
|
||||||
|
result[name]['gpu_name'] = gpu_name
|
||||||
|
result[name]['bus_id'] = bus_id
|
||||||
|
|
||||||
|
connector_0, resolution_0, refreshrate_0 = max(modes, key=sort_mode)[:3]
|
||||||
|
vendor_0, model_0 = parse_edid_data('/etc/X11/edid.{}.bin'.format(connector_0))
|
||||||
|
create_entry(result, 'primary', connector_0, resolution_0, refreshrate_0, vendor_0, model_0)
|
||||||
|
|
||||||
|
# check if additional monitors exist
|
||||||
|
other_modes = [mode for mode in modes if mode[0] != connector_0]
|
||||||
|
if other_modes:
|
||||||
|
connector_1, resolution_1, refreshrate_1 = max(other_modes, key=sort_mode)[:3]
|
||||||
|
vendor_1, model_1 = parse_edid_data('/etc/X11/edid.{}.bin'.format(connector_1))
|
||||||
|
create_entry(result, 'secondary', connector_1, resolution_1, refreshrate_1, vendor_1, model_1)
|
||||||
|
|
||||||
#print(json.dumps(data, sort_keys=True, indent=4))
|
#print(json.dumps(data, sort_keys=True, indent=4))
|
||||||
module.exit_json(changed=True if write_edids else False, ansible_facts={'xrandr': data})
|
module.exit_json(changed=True if write_edids else False, ansible_facts={'xrandr': data, 'xorg': result})
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
module = AnsibleModule(argument_spec=ARG_SPECS, supports_check_mode=False,)
|
module = AnsibleModule(argument_spec=ARG_SPECS, supports_check_mode=False,)
|
||||||
|
15
roles/autoinstall-ubuntu-drivers/tasks/main.yml
Normal file
15
roles/autoinstall-ubuntu-drivers/tasks/main.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
# file roles/autoinstall-ubuntu-drivers/tasks/main.yml
|
||||||
|
- name: apt | install ubuntu-drivers-common
|
||||||
|
apt:
|
||||||
|
name: ubuntu-drivers-common
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: ensure /etc/yavdr exists
|
||||||
|
file:
|
||||||
|
path: /etc/yavdr
|
||||||
|
state: directory
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
- name: let ubuntu-drivers automatically install additional drivers
|
||||||
|
command: ubuntu-drivers --package-list /etc/yavdr/autoinstalled autoinstall
|
20
roles/dvd/tasks/main.yml
Normal file
20
roles/dvd/tasks/main.yml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
# file: roles/dvd/tasks/main.yml
|
||||||
|
|
||||||
|
- name: preconfigure libdvd-pkg
|
||||||
|
shell: |
|
||||||
|
echo 'libdvd-pkg libdvd-pkg/post-invoke_hook-install boolean true' | debconf-set-selections
|
||||||
|
echo 'libdvd-pkg libdvd-pkg/build boolean true' | debconf-set-selections
|
||||||
|
|
||||||
|
- name: apt | install libdvd-pkg
|
||||||
|
apt:
|
||||||
|
name: '{{ item }}'
|
||||||
|
state: present
|
||||||
|
install_recommends: no
|
||||||
|
with_items:
|
||||||
|
- libdvd-pkg
|
||||||
|
|
||||||
|
- name: change udev rule to allow KODI to eject optical disks
|
||||||
|
shell: sed 's/--lock-media //' /lib/udev/rules.d/60-cdrom_id.rules > /etc/udev/rules.d/60-cdrom_id.rules
|
||||||
|
args:
|
||||||
|
creates: /etc/udev/rules.d/60-cdrom_id.rules
|
@ -1,3 +1,5 @@
|
|||||||
|
---
|
||||||
|
|
||||||
- name: Update GRUB
|
- name: Update GRUB
|
||||||
command: update-grub
|
command: update-grub
|
||||||
failed_when: ('error' in grub_register_update.stderr)
|
failed_when: ('error' in grub_register_update.stderr)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
---
|
||||||
|
|
||||||
- name: custom grub configuration for timeout and reboot halt
|
- name: custom grub configuration for timeout and reboot halt
|
||||||
template:
|
template:
|
||||||
src: templates/50_custom.j2
|
src: templates/50_custom.j2
|
||||||
|
60
roles/kodi/files/userdata/Lircmap.xml
Normal file
60
roles/kodi/files/userdata/Lircmap.xml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<lircmap>
|
||||||
|
<remote device="linux-input-layer">
|
||||||
|
<altname>cx23885_remote</altname>
|
||||||
|
<altname>devinput</altname>
|
||||||
|
<up>KEY_UP</up>
|
||||||
|
<down>KEY_DOWN</down>
|
||||||
|
<menu>KEY_MENU</menu>
|
||||||
|
<select>KEY_OK</select>
|
||||||
|
<back>KEY_ESC</back>
|
||||||
|
<left>KEY_LEFT</left>
|
||||||
|
<right>KEY_RIGHT</right>
|
||||||
|
<red>KEY_RED</red>
|
||||||
|
<green>KEY_GREEN</green>
|
||||||
|
<yellow>KEY_YELLOW</yellow>
|
||||||
|
<blue>KEY_BLUE</blue>
|
||||||
|
<zero>KEY_0</zero>
|
||||||
|
<one>KEY_1</one>
|
||||||
|
<two>KEY_2</two>
|
||||||
|
<three>KEY_3</three>
|
||||||
|
<four>KEY_4</four>
|
||||||
|
<five>KEY_5</five>
|
||||||
|
<six>KEY_6</six>
|
||||||
|
<seven>KEY_7</seven>
|
||||||
|
<eight>KEY_8</eight>
|
||||||
|
<nine>KEY_9</nine>
|
||||||
|
<info>KEY_INFO</info>
|
||||||
|
<play>KEY_PLAY</play>
|
||||||
|
<play>KEY_PLAYPAUSE</play>
|
||||||
|
<pause>KEY_PAUSE</pause>
|
||||||
|
<stop>KEY_STOP</stop>
|
||||||
|
<record>KEY_RECORD</record>
|
||||||
|
<forward>KEY_FASTFORWARD</forward>
|
||||||
|
<reverse>KEY_REWIND</reverse>
|
||||||
|
<skipplus>KEY_NEXT</skipplus>
|
||||||
|
<skipminus>KEY_BACK</skipminus>
|
||||||
|
<power>KEY_POWER2</power>
|
||||||
|
<channelplus>KEY_CHANNELUP</channelplus>
|
||||||
|
<channelminus>KEY_CHANNELDOWN</channelminus>
|
||||||
|
<title>KEY_PROG3</title>
|
||||||
|
<volumeplus>KEY_VOLUMEUP</volumeplus>
|
||||||
|
<volumeminus>KEY_VOLUMEDOWN</volumeminus>
|
||||||
|
<teletext>KEY_TEXT</teletext>
|
||||||
|
<mute>KEY_MUTE</mute>
|
||||||
|
<start>KEY_SELECT</start>
|
||||||
|
<subtitle>KEY_SUBTITLE</subtitle>
|
||||||
|
<audio>KEY_MODE</audio>
|
||||||
|
<mute>KEY_MUTE</mute>
|
||||||
|
<myvideo>KEY_VIDEO</myvideo>
|
||||||
|
<mymusic>KEY_AUDIO</mymusic>
|
||||||
|
<mypictures>KEY_IMAGES</mypictures>
|
||||||
|
<recordedtv>KEY_PVR</recordedtv>
|
||||||
|
<guide>KEY_EPG</guide>
|
||||||
|
<display>KEY_SCREEN</display>
|
||||||
|
<enter>KEY_PROG4</enter>
|
||||||
|
<playlist>KEY_ZOOM</playlist>
|
||||||
|
<livetv>KEY_CHANNEL</livetv>
|
||||||
|
<mytv>KEY_TV</mytv>
|
||||||
|
<liveradio>KEY_FN</liveradio>
|
||||||
|
</remote>
|
||||||
|
</lircmap>
|
539
roles/kodi/files/userdata/keymaps/remote.xml
Normal file
539
roles/kodi/files/userdata/keymaps/remote.xml
Normal file
@ -0,0 +1,539 @@
|
|||||||
|
<!-- This file contains the mapping of keys (gamepad, remote, and keyboard) to actions within XBMC -->
|
||||||
|
<!-- The <global> section is a fall through - they will only be used if the button is not -->
|
||||||
|
<!-- used in the current window's section. Note that there is only handling -->
|
||||||
|
<!-- for a single action per button at this stage. -->
|
||||||
|
<!-- For joystick/gamepad configuration under linux/win32, see below as it differs from xbox -->
|
||||||
|
<!-- gamepads. -->
|
||||||
|
|
||||||
|
<!-- The format is: -->
|
||||||
|
<!-- <device> -->
|
||||||
|
<!-- <button>action</button> -->
|
||||||
|
<!-- </device> -->
|
||||||
|
|
||||||
|
<!-- To map keys from other remotes using the RCA protocol, you may add <universalremote> blocks -->
|
||||||
|
<!-- In this case, the tags used are <obc#> where # is the original button code (OBC) of the key -->
|
||||||
|
<!-- You set it up by adding a <universalremote> block to the window or <global> section: -->
|
||||||
|
<!-- <universalremote> -->
|
||||||
|
<!-- <obc45>Stop</obc45> -->
|
||||||
|
<!-- </universalremote> -->
|
||||||
|
<!-- To find out the OBC's of your remote, try enabling the <displayremotecodes> tag in AdvancedSettings.xml -->
|
||||||
|
|
||||||
|
<!-- Note that the action can be a built-in function. -->
|
||||||
|
<!-- eg <B>XBMC.ActivateWindow(MyMusic)</B> -->
|
||||||
|
<!-- would automatically go to My Music on the press of the B button. -->
|
||||||
|
|
||||||
|
<!-- Joysticks / Gamepads: -->
|
||||||
|
<!-- See the sample PS3 controller configuration below for the format. -->
|
||||||
|
<!-- -->
|
||||||
|
<!-- Joystick Name: -->
|
||||||
|
<!-- Do 'cat /proc/bus/input/devices' or see your xbmc log file to find the names of -->
|
||||||
|
<!-- detected joysticks. The name used in the configuration should match the detected name. -->
|
||||||
|
<!-- -->
|
||||||
|
<!-- Button Ids: -->
|
||||||
|
<!-- 'id' is the button ID used by SDL. Joystick button ids of connected joysticks appear -->
|
||||||
|
<!-- in xbmc.log when they are pressed. Use your log to map custom buttons to actions. -->
|
||||||
|
<!-- -->
|
||||||
|
<!-- Axis Ids / Analog Controls -->
|
||||||
|
<!-- Coming soon. -->
|
||||||
|
<keymap>
|
||||||
|
<global>
|
||||||
|
<universalremote>
|
||||||
|
<obc150>XBMC.ejecttray()</obc150>
|
||||||
|
<obc151>Playlist</obc151>
|
||||||
|
</universalremote>
|
||||||
|
<remote>
|
||||||
|
<play>PlayPause</play>
|
||||||
|
<pause>Pause</pause>
|
||||||
|
<stop>Stop</stop>
|
||||||
|
<forward>FastForward</forward>
|
||||||
|
<reverse>Rewind</reverse>
|
||||||
|
<left>Left</left>
|
||||||
|
<right>Right</right>
|
||||||
|
<up>Up</up>
|
||||||
|
<down>Down</down>
|
||||||
|
<select>Select</select>
|
||||||
|
<pageplus>PageUp</pageplus>
|
||||||
|
<pageminus>PageDown</pageminus>
|
||||||
|
<back>ParentDir</back>
|
||||||
|
<menu>PreviousMenu</menu>
|
||||||
|
<title>ContextMenu</title>
|
||||||
|
<info>Info</info>
|
||||||
|
<skipplus>SkipNext</skipplus>
|
||||||
|
<skipminus>SkipPrevious</skipminus>
|
||||||
|
<display>FullScreen</display>
|
||||||
|
<start>PreviousMenu</start>
|
||||||
|
<record>Screenshot</record>
|
||||||
|
<volumeplus>VolumeUp</volumeplus>
|
||||||
|
<volumeminus>VolumeDown</volumeminus>
|
||||||
|
<mute>Mute</mute>
|
||||||
|
<power>XBMC.Quit()</power>
|
||||||
|
<myvideo>XBMC.ActivateWindow(MyVideos)</myvideo>
|
||||||
|
<mymusic>XBMC.ActivateWindow(MyMusic)</mymusic>
|
||||||
|
<mypictures>XBMC.ActivateWindow(MyPictures)</mypictures>
|
||||||
|
<!--- <mytv>XBMC.ActivateWindow(Home)</mytv> -->
|
||||||
|
<recordedtv>XBMC.ActivateWindowAndFocus(MyPVR, 34,0, 13,0)</recordedtv>
|
||||||
|
<!-- PVR: EPG -->
|
||||||
|
<guide>XBMC.ActivateWindowAndFocus(MyPVR, 31,0, 10,0)</guide>
|
||||||
|
<!-- PVR: Channellist -->
|
||||||
|
<livetv>XBMC.ActivateWindowAndFocus(MyPVR, 32,0, 11,0)</livetv>
|
||||||
|
<!-- PVR: Radio -->
|
||||||
|
<liveradio>XBMC.ActivateWindowAndFocus(MyPVR, 33,0, 12,0)</liveradio>
|
||||||
|
<red>XBMC.ActivateWindow(Home)</red>
|
||||||
|
<yellow>XBMC.ActivateWindow(MyVideos)</yellow>
|
||||||
|
<green>XBMC.ActivateWindow(MyMusic)</green>
|
||||||
|
<!-- <blue>XBMC.ActivateWindow(MyPictures)</blue> -->
|
||||||
|
<zero>Number0</zero>
|
||||||
|
<one>Number1</one>
|
||||||
|
<two>JumpSMS2</two>
|
||||||
|
<three>JumpSMS3</three>
|
||||||
|
<four>JumpSMS4</four>
|
||||||
|
<five>JumpSMS5</five>
|
||||||
|
<six>JumpSMS6</six>
|
||||||
|
<seven>JumpSMS7</seven>
|
||||||
|
<eight>JumpSMS8</eight>
|
||||||
|
<nine>JumpSMS9</nine>
|
||||||
|
<audio>AudioNextLanguage</audio>
|
||||||
|
<subtitle>ShowSubtitles</subtitle>
|
||||||
|
<enter>FullScreen</enter>
|
||||||
|
<blue>ContextMenu</blue>
|
||||||
|
<playlist>XBMC.ActivateWindow(MyMusicPlaylist)</playlist>
|
||||||
|
</remote>
|
||||||
|
</global>
|
||||||
|
<Home>
|
||||||
|
<remote>
|
||||||
|
<menu>XBMC.Skin.ToggleSetting(HomeViewToggle)</menu>
|
||||||
|
<info>XBMC.ActivateWindow(SystemInfo)</info>
|
||||||
|
<clear>XBMC.ActivateWindow(Weather)</clear>
|
||||||
|
<blue>XBMC.ActivateWindow(Settings)</blue>
|
||||||
|
<red>FullScreen</red>
|
||||||
|
<back>FullScreen</back>
|
||||||
|
</remote>
|
||||||
|
</Home>
|
||||||
|
<MyFiles>
|
||||||
|
<remote>
|
||||||
|
<clear>Delete</clear>
|
||||||
|
</remote>
|
||||||
|
</MyFiles>
|
||||||
|
<MyMusicPlaylist>
|
||||||
|
<remote>
|
||||||
|
<back>Playlist</back> <!-- Close playlist -->
|
||||||
|
<clear>Delete</clear>
|
||||||
|
</remote>
|
||||||
|
</MyMusicPlaylist>
|
||||||
|
<MyMusicPlaylistEditor>
|
||||||
|
<remote>
|
||||||
|
<zero>Queue</zero>
|
||||||
|
</remote>
|
||||||
|
</MyMusicPlaylistEditor>
|
||||||
|
<MyMusicFiles>
|
||||||
|
<remote>
|
||||||
|
<zero>Queue</zero>
|
||||||
|
<star>Queue</star>
|
||||||
|
<start>ContextMenu</start>
|
||||||
|
</remote>
|
||||||
|
</MyMusicFiles>
|
||||||
|
<MyMusicLibrary>
|
||||||
|
<remote>
|
||||||
|
<zero>Queue</zero>
|
||||||
|
<star>Queue</star>
|
||||||
|
</remote>
|
||||||
|
</MyMusicLibrary>
|
||||||
|
<FullscreenVideo>
|
||||||
|
<remote>
|
||||||
|
<back>FullScreen</back>
|
||||||
|
<zero>Number0</zero>
|
||||||
|
<one>Number1</one>
|
||||||
|
<two>Number2</two>
|
||||||
|
<three>Number3</three>
|
||||||
|
<four>Number4</four>
|
||||||
|
<five>Number5</five>
|
||||||
|
<six>Number6</six>
|
||||||
|
<seven>Number7</seven>
|
||||||
|
<eight>Number8</eight>
|
||||||
|
<nine>Number9</nine>
|
||||||
|
<left>Rewind</left>
|
||||||
|
<right>FastForward</right>
|
||||||
|
<up>Play</up>
|
||||||
|
<down>Pause</down>
|
||||||
|
<yellow>StepForward</yellow>
|
||||||
|
<green>StepBack</green>
|
||||||
|
<blue>CodecInfo</blue>
|
||||||
|
<menu>OSD</menu>
|
||||||
|
<start>OSD</start>
|
||||||
|
<info>XBMC.ActivateWindow(PVROSDChannels)</info>
|
||||||
|
<title>XBMC.ActivateWindow(PVROSDChannels)</title>
|
||||||
|
<display>AspectRatio</display>
|
||||||
|
<select>Info</select>
|
||||||
|
<teletext>XBMC.ActivateWindow(Teletext)</teletext>
|
||||||
|
<channelplus>SkipNext</channelplus>
|
||||||
|
<channelminus>SkipPrevious</channelminus>
|
||||||
|
<record>XBMC.PlayerControl(Record)</record>
|
||||||
|
</remote>
|
||||||
|
</FullscreenVideo>
|
||||||
|
<FullscreenInfo>
|
||||||
|
<remote>
|
||||||
|
<back>FullScreen</back>
|
||||||
|
<left>Rewind</left>
|
||||||
|
<right>FastForward</right>
|
||||||
|
<up>Play</up>
|
||||||
|
<down>Pause</down>
|
||||||
|
<yellow>StepForward</yellow>
|
||||||
|
<green>StepBack</green>
|
||||||
|
<display>AspectRatio</display>
|
||||||
|
<info>CodecInfo</info>
|
||||||
|
<select>Close</select>
|
||||||
|
<menu>OSD</menu>
|
||||||
|
</remote>
|
||||||
|
</FullscreenInfo>
|
||||||
|
<PlayerControls>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
<menu>Close</menu>
|
||||||
|
</remote>
|
||||||
|
</PlayerControls>
|
||||||
|
<Visualisation>
|
||||||
|
<universalremote>
|
||||||
|
<obc151>XBMC.ActivateWindow(MyMusicPlaylist)</obc151>
|
||||||
|
</universalremote>
|
||||||
|
<remote>
|
||||||
|
<red>FullScreen</red>
|
||||||
|
<yellow>AnalogSeekForward</yellow>
|
||||||
|
<green>AnalogSeekBack</green>
|
||||||
|
<blue>CodecInfo</blue>
|
||||||
|
<left>Rewind</left>
|
||||||
|
<right>FastForward</right>
|
||||||
|
<pageplus>SkipNext</pageplus>
|
||||||
|
<pageminus>SkipPrevious</pageminus>
|
||||||
|
<up>Play</up>
|
||||||
|
<down>Pause</down>
|
||||||
|
<info>XBMC.ActivateWindow(PVROSDChannels)</info>
|
||||||
|
<back>XBMC.ActivateWindow(MyMusicPlaylist)</back>
|
||||||
|
<select>Info</select>
|
||||||
|
<menu>XBMC.ActivateWindow(MusicOSD)</menu>
|
||||||
|
<start>XBMC.ActivateWindow(MusicOSD)</start>
|
||||||
|
</remote>
|
||||||
|
</Visualisation>
|
||||||
|
<MusicOSD>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
<menu>Close</menu>
|
||||||
|
<start>Close</start>
|
||||||
|
<info>CodecInfo</info>
|
||||||
|
</remote>
|
||||||
|
</MusicOSD>
|
||||||
|
<VisualisationSettings>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
<menu>Close</menu>
|
||||||
|
</remote>
|
||||||
|
</VisualisationSettings>
|
||||||
|
<VisualisationPresetList>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
<menu>Close</menu>
|
||||||
|
</remote>
|
||||||
|
</VisualisationPresetList>
|
||||||
|
<SlideShow>
|
||||||
|
<remote>
|
||||||
|
<zero>ZoomNormal</zero>
|
||||||
|
<one>ZoomLevel1</one>
|
||||||
|
<two>ZoomLevel2</two>
|
||||||
|
<three>ZoomLevel3</three>
|
||||||
|
<four>ZoomLevel4</four>
|
||||||
|
<five>ZoomLevel5</five>
|
||||||
|
<six>ZoomLevel6</six>
|
||||||
|
<seven>ZoomLevel7</seven>
|
||||||
|
<eight>ZoomLevel8</eight>
|
||||||
|
<nine>ZoomLevel9</nine>
|
||||||
|
<info>CodecInfo</info>
|
||||||
|
<pageplus>ZoomIn</pageplus>
|
||||||
|
<pageminus>ZoomOut</pageminus>
|
||||||
|
<select>Rotate</select>
|
||||||
|
<up>Pause</up>
|
||||||
|
<down>Play</down>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</SlideShow>
|
||||||
|
<ScreenCalibration>
|
||||||
|
<remote>
|
||||||
|
<select>NextCalibration</select>
|
||||||
|
<enter>NextCalibration</enter>
|
||||||
|
<zero>ResetCalibration</zero>
|
||||||
|
<display>NextResolution</display>
|
||||||
|
<xbox>NextResolution</xbox>
|
||||||
|
</remote>
|
||||||
|
</ScreenCalibration>
|
||||||
|
<GUICalibration>
|
||||||
|
<remote>
|
||||||
|
<select>NextCalibration</select>
|
||||||
|
<enter>NextCalibration</enter>
|
||||||
|
<zero>ResetCalibration</zero>
|
||||||
|
</remote>
|
||||||
|
</GUICalibration>
|
||||||
|
<SelectDialog>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
</remote>
|
||||||
|
</SelectDialog>
|
||||||
|
<VideoOSD>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
<menu>Close</menu>
|
||||||
|
<start>Close</start>
|
||||||
|
</remote>
|
||||||
|
</VideoOSD>
|
||||||
|
<VideoMenu>
|
||||||
|
<remote>
|
||||||
|
<menu>OSD</menu>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
<info>Info</info>
|
||||||
|
<title>CodecInfo</title>
|
||||||
|
<zero>Number0</zero>
|
||||||
|
<one>Number1</one>
|
||||||
|
<two>Number2</two>
|
||||||
|
<three>Number3</three>
|
||||||
|
<four>Number4</four>
|
||||||
|
<five>Number5</five>
|
||||||
|
<six>Number6</six>
|
||||||
|
<seven>Number7</seven>
|
||||||
|
<eight>Number8</eight>
|
||||||
|
<nine>Number9</nine>
|
||||||
|
</remote>
|
||||||
|
</VideoMenu>
|
||||||
|
<OSDVideoSettings>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
<menu>Close</menu>
|
||||||
|
<start>Close</start>
|
||||||
|
</remote>
|
||||||
|
</OSDVideoSettings>
|
||||||
|
<OSDAudioSettings>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
<menu>Close</menu>
|
||||||
|
<start>Close</start>
|
||||||
|
</remote>
|
||||||
|
</OSDAudioSettings>
|
||||||
|
<VideoBookmarks>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
<menu>Close</menu>
|
||||||
|
<start>Close</start>
|
||||||
|
<zero>Delete</zero>
|
||||||
|
</remote>
|
||||||
|
</VideoBookmarks>
|
||||||
|
<MyVideoLibrary>
|
||||||
|
<remote>
|
||||||
|
<zero>Queue</zero>
|
||||||
|
<clear>Delete</clear>
|
||||||
|
<green>ToggleWatched</green>
|
||||||
|
<yellow>Queue</yellow>
|
||||||
|
</remote>
|
||||||
|
</MyVideoLibrary>
|
||||||
|
<MyVideoFiles>
|
||||||
|
<remote>
|
||||||
|
<zero>Queue</zero>
|
||||||
|
<star>Queue</star>
|
||||||
|
<blue>ContextMenu</blue>
|
||||||
|
<green>ToggleWatched</green>
|
||||||
|
<yellow>Queue</yellow>
|
||||||
|
</remote>
|
||||||
|
</MyVideoFiles>
|
||||||
|
<MyPictures>
|
||||||
|
<remote>
|
||||||
|
<zero>Queue</zero>
|
||||||
|
<star>Queue</star>
|
||||||
|
<start>ContextMenu</start>
|
||||||
|
</remote>
|
||||||
|
</MyPictures>
|
||||||
|
<MyVideoPlaylist>
|
||||||
|
<remote>
|
||||||
|
<back>Playlist</back> <!-- Close playlist -->
|
||||||
|
<clear>Delete</clear>
|
||||||
|
<zero>Delete</zero>
|
||||||
|
</remote>
|
||||||
|
</MyVideoPlaylist>
|
||||||
|
<VirtualKeyboard>
|
||||||
|
<remote>
|
||||||
|
<back>BackSpace</back>
|
||||||
|
<star>Shift</star>
|
||||||
|
<hash>Symbols</hash>
|
||||||
|
<zero>Number0</zero>
|
||||||
|
<one>Number1</one>
|
||||||
|
<two>Number2</two>
|
||||||
|
<three>Number3</three>
|
||||||
|
<four>Number4</four>
|
||||||
|
<five>Number5</five>
|
||||||
|
<six>Number6</six>
|
||||||
|
<seven>Number7</seven>
|
||||||
|
<eight>Number8</eight>
|
||||||
|
<nine>Number9</nine>
|
||||||
|
<pageminus>CursorLeft</pageminus>
|
||||||
|
<pageplus>CursorRight</pageplus>
|
||||||
|
</remote>
|
||||||
|
</VirtualKeyboard>
|
||||||
|
<ContextMenu>
|
||||||
|
<remote>
|
||||||
|
<blue>Close</blue>
|
||||||
|
<back>Close</back>
|
||||||
|
</remote>
|
||||||
|
</ContextMenu>
|
||||||
|
<FileStackingDialog>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
</remote>
|
||||||
|
</FileStackingDialog>
|
||||||
|
<Scripts>
|
||||||
|
<remote>
|
||||||
|
<info>XBMC.ActivateWindow(ScriptsDebugInfo)</info>
|
||||||
|
</remote>
|
||||||
|
</Scripts>
|
||||||
|
<ScriptsDebugInfo>
|
||||||
|
<remote>
|
||||||
|
<info>Info</info> <!-- clears debug python info -->
|
||||||
|
</remote>
|
||||||
|
</ScriptsDebugInfo>
|
||||||
|
<NumericInput>
|
||||||
|
<remote>
|
||||||
|
<zero>Number0</zero>
|
||||||
|
<one>Number1</one>
|
||||||
|
<two>Number2</two>
|
||||||
|
<three>Number3</three>
|
||||||
|
<four>Number4</four>
|
||||||
|
<five>Number5</five>
|
||||||
|
<six>Number6</six>
|
||||||
|
<seven>Number7</seven>
|
||||||
|
<eight>Number8</eight>
|
||||||
|
<nine>Number9</nine>
|
||||||
|
<back>BackSpace</back>
|
||||||
|
</remote>
|
||||||
|
</NumericInput>
|
||||||
|
<Weather>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</Weather>
|
||||||
|
<Settings>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</Settings>
|
||||||
|
<MyPicturesSettings>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</MyPicturesSettings>
|
||||||
|
<MyProgramsSettings>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</MyProgramsSettings>
|
||||||
|
<MyWeatherSettings>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</MyWeatherSettings>
|
||||||
|
<MyMusicSettings>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</MyMusicSettings>
|
||||||
|
<SystemSettings>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</SystemSettings>
|
||||||
|
<MyVideosSettings>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</MyVideosSettings>
|
||||||
|
<NetworkSettings>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</NetworkSettings>
|
||||||
|
<AppearanceSettings>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</AppearanceSettings>
|
||||||
|
<Profiles>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</Profiles>
|
||||||
|
<systeminfo>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</systeminfo>
|
||||||
|
<shutdownmenu>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</shutdownmenu>
|
||||||
|
<submenu>
|
||||||
|
<remote>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</submenu>
|
||||||
|
<MusicInformation>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
</remote>
|
||||||
|
</MusicInformation>
|
||||||
|
<MovieInformation>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
</remote>
|
||||||
|
</MovieInformation>
|
||||||
|
<LockSettings>
|
||||||
|
<remote>
|
||||||
|
<menu>Close</menu>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</LockSettings>
|
||||||
|
<ProfileSettings>
|
||||||
|
<remote>
|
||||||
|
<menu>Close</menu>
|
||||||
|
<back>PreviousMenu</back>
|
||||||
|
</remote>
|
||||||
|
</ProfileSettings>
|
||||||
|
<PictureInfo>
|
||||||
|
<remote>
|
||||||
|
<skipplus>NextPicture</skipplus>
|
||||||
|
<skipminus>PreviousPicture</skipminus>
|
||||||
|
<info>Close</info>
|
||||||
|
<back>Close</back>
|
||||||
|
</remote>
|
||||||
|
</PictureInfo>
|
||||||
|
<Teletext>
|
||||||
|
<remote>
|
||||||
|
<zero>number0</zero>
|
||||||
|
<one>number1</one>
|
||||||
|
<two>number2</two>
|
||||||
|
<three>number3</three>
|
||||||
|
<four>number4</four>
|
||||||
|
<five>number5</five>
|
||||||
|
<six>number6</six>
|
||||||
|
<seven>number7</seven>
|
||||||
|
<eight>number8</eight>
|
||||||
|
<nine>number9</nine>
|
||||||
|
<red>Red</red>
|
||||||
|
<green>Green</green>
|
||||||
|
<yellow>Yellow</yellow>
|
||||||
|
<blue>Blue</blue>
|
||||||
|
<info>Info</info>
|
||||||
|
<back>Close</back>
|
||||||
|
<menu>Close</menu>
|
||||||
|
<start>Close</start>
|
||||||
|
<teletext>Close</teletext>
|
||||||
|
</remote>
|
||||||
|
</Teletext>
|
||||||
|
<Favourites>
|
||||||
|
<remote>
|
||||||
|
<back>Close</back>
|
||||||
|
</remote>
|
||||||
|
</Favourites>
|
||||||
|
</keymap>
|
33
roles/kodi/tasks/main.yml
Normal file
33
roles/kodi/tasks/main.yml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: apt | install kodi packages
|
||||||
|
apt:
|
||||||
|
name: '{{ item }}'
|
||||||
|
state: present
|
||||||
|
install_recommends: no
|
||||||
|
with_items:
|
||||||
|
- kodi
|
||||||
|
- kodi-pvr-vdr-vnsi
|
||||||
|
- kodi-eventclients-xbmc-send
|
||||||
|
|
||||||
|
- name: create kodi.service for the user session
|
||||||
|
template:
|
||||||
|
src: 'templates/kodi.service.j2'
|
||||||
|
dest: '{{ vdr.home }}/.config/systemd/user/kodi.service'
|
||||||
|
mode: 0755
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
|
||||||
|
- name: create kodi user directory
|
||||||
|
file:
|
||||||
|
dest: '{{ vdr.home }}/{{ item }}'
|
||||||
|
state: directory
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
mode: "0775"
|
||||||
|
with_items:
|
||||||
|
- .kodi
|
||||||
|
- .kodi/userdata
|
||||||
|
- .kodi/userdata/keymaps
|
||||||
|
|
||||||
|
# TODO: Add configuration files
|
12
roles/kodi/templates/kodi.service.j2
Normal file
12
roles/kodi/templates/kodi.service.j2
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Start kodi in user session
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
PassEnvironment=DISPLAY XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
|
||||||
|
ExecStartPre=-/usr/bin/set-kodi-display
|
||||||
|
ExecStart=/usr/bin/kodi
|
||||||
|
ExecStop=/bin/bash -c "/usr/bin/kodi-send --action=QUIT; while /usr/bin/pgrep kodi; do sleep 1; done; sleep 1"
|
||||||
|
TimeoutStopSec=10
|
||||||
|
SuccessExitStatus=0 127
|
||||||
|
Restart=on-failure
|
11
roles/nfs-server/avahi/service.j2
Normal file
11
roles/nfs-server/avahi/service.j2
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" standalone='no'?>
|
||||||
|
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
|
||||||
|
<service-group>
|
||||||
|
<name replace-wildcards="yes">{{ item.value|capitalize }} on %h</name> ## Name
|
||||||
|
<service>
|
||||||
|
<type>_nfs._tcp</type>
|
||||||
|
<port>2049</port>
|
||||||
|
<txt-record>path={{ item.value }}</txt-record> ## path to shared Folder
|
||||||
|
<txt-record>subtype={% 'vdr' if item == 'recordings' else item %}</txt-record> ## subtype
|
||||||
|
</service>
|
||||||
|
</service-group>
|
@ -1,3 +1,5 @@
|
|||||||
|
---
|
||||||
|
|
||||||
- name: install nfs server packages
|
- name: install nfs server packages
|
||||||
apt:
|
apt:
|
||||||
name: '{{ item }}'
|
name: '{{ item }}'
|
||||||
@ -12,3 +14,9 @@
|
|||||||
src: templates/nfs-exports.j2
|
src: templates/nfs-exports.j2
|
||||||
dest: /etc/exports
|
dest: /etc/exports
|
||||||
notify: [ 'Restart NFS Kernel Server' ]
|
notify: [ 'Restart NFS Kernel Server' ]
|
||||||
|
|
||||||
|
- name: populate /etc/avahi/services
|
||||||
|
template:
|
||||||
|
src: templates/avahi/service.j2
|
||||||
|
dest: '/etc/avahi/services/yavdr-{{ item.key }}.service'
|
||||||
|
with_dict: '{{ media_dirs }}'
|
||||||
|
11
roles/nfs-server/templates/avahi/service.j2
Normal file
11
roles/nfs-server/templates/avahi/service.j2
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" standalone='no'?>
|
||||||
|
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
|
||||||
|
<service-group>
|
||||||
|
<name replace-wildcards="yes">{{ item.key|capitalize }} on %h</name> ## Name
|
||||||
|
<service>
|
||||||
|
<type>_nfs._tcp</type>
|
||||||
|
<port>2049</port>
|
||||||
|
<txt-record>path={{ item.value }}</txt-record> ## path to shared Folder
|
||||||
|
<txt-record>subtype={{ 'vdr' if item.key == 'recordings' else item.key }}</txt-record> ## subtype
|
||||||
|
</service>
|
||||||
|
</service-group>
|
16
roles/nvidia-381/tasks/main.yml
Normal file
16
roles/nvidia-381/tasks/main.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: add ppa:graphics-drivers/ppa
|
||||||
|
apt_repository:
|
||||||
|
repo: 'ppa:graphics-drivers/ppa'
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
|
||||||
|
- name: install nvidia-381 and other required packages
|
||||||
|
apt:
|
||||||
|
name: '{{ item }}'
|
||||||
|
state: present
|
||||||
|
install_recommends: no
|
||||||
|
with_items:
|
||||||
|
- nvidia-381
|
||||||
|
- nvidia-settings
|
15
roles/pulseaudio/tasks/main.yml
Normal file
15
roles/pulseaudio/tasks/main.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: apt | install pulseaudio and pavucontrol
|
||||||
|
apt:
|
||||||
|
name: '{{ item }}'
|
||||||
|
state: present
|
||||||
|
install_recommends: no
|
||||||
|
with_items:
|
||||||
|
- pulseaudio
|
||||||
|
- pavucontrol
|
||||||
|
|
||||||
|
- name: create /etc/asound.conf with pulseaudio as default device
|
||||||
|
template:
|
||||||
|
src: templates/alsa/asound.conf.j2
|
||||||
|
dest: /etc/asound.conf
|
14
roles/pulseaudio/templates/alsa/asound.conf.j2
Normal file
14
roles/pulseaudio/templates/alsa/asound.conf.j2
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Use PulseAudio by default
|
||||||
|
pcm.!default {
|
||||||
|
type pulse
|
||||||
|
fallback "sysdefault"
|
||||||
|
hint {
|
||||||
|
show on
|
||||||
|
description "Default ALSA Output (currently PulseAudio Sound Server)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ctl.!default {
|
||||||
|
type pulse
|
||||||
|
fallback "sysdefault"
|
||||||
|
}
|
@ -1,7 +1,8 @@
|
|||||||
|
---
|
||||||
# file: roles/samba-config/tasks/main.yml
|
# file: roles/samba-config/tasks/main.yml
|
||||||
|
|
||||||
# TODO:
|
# TODO:
|
||||||
#- name: divert original smbd.conf
|
# - name: divert original smbd.conf
|
||||||
|
|
||||||
- name: touch smb.conf.custom
|
- name: touch smb.conf.custom
|
||||||
file:
|
file:
|
||||||
|
@ -77,7 +77,6 @@
|
|||||||
follow symlinks= yes
|
follow symlinks= yes
|
||||||
wide links= yes
|
wide links= yes
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% for name, path in media_dirs.iteritems() %}
|
{% for name, path in media_dirs.iteritems() %}
|
||||||
[{{ name }}]
|
[{{ name }}]
|
||||||
path = {{ path }}
|
path = {{ path }}
|
||||||
@ -93,5 +92,4 @@
|
|||||||
wide links = yes
|
wide links = yes
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
include = /etc/samba/smb.conf.custom
|
include = /etc/samba/smb.conf.custom
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
# file: roles/samba-install/tasks/main.yml
|
# file: roles/samba-install/tasks/main.yml
|
||||||
|
|
||||||
- name: install samba server
|
- name: install samba server
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
- name: show vars
|
- name: show vars
|
||||||
debug:
|
debug:
|
||||||
var: '{{ system }}'
|
var: '{{ system }}'
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
vars:
|
|
||||||
foo:
|
|
||||||
- bar
|
|
||||||
- baz
|
|
||||||
- spam
|
|
14
roles/vdr/files/keymacros.conf
Normal file
14
roles/vdr/files/keymacros.conf
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Remote control key macros for VDR
|
||||||
|
#
|
||||||
|
# Format:
|
||||||
|
#
|
||||||
|
# macrokey key1 key2 key3...
|
||||||
|
# macrokey @plugin key1 key2 key3...
|
||||||
|
#
|
||||||
|
# See man vdr(5)
|
||||||
|
|
||||||
|
Red Recordings
|
||||||
|
Green Schedule
|
||||||
|
Yellow Info
|
||||||
|
Blue Timers
|
||||||
|
User0 @osdteletext
|
128
roles/vdr/files/remote.conf
Normal file
128
roles/vdr/files/remote.conf
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
LIRC.Up KEY_UP
|
||||||
|
LIRC.Down KEY_DOWN
|
||||||
|
LIRC.Menu KEY_MENU
|
||||||
|
LIRC.Ok KEY_OK
|
||||||
|
LIRC.Back KEY_ESC
|
||||||
|
LIRC.Left KEY_LEFT
|
||||||
|
LIRC.Right KEY_RIGHT
|
||||||
|
LIRC.Red KEY_RED
|
||||||
|
LIRC.Green KEY_GREEN
|
||||||
|
LIRC.Yellow KEY_YELLOW
|
||||||
|
LIRC.Blue KEY_BLUE
|
||||||
|
LIRC.0 KEY_0
|
||||||
|
LIRC.1 KEY_1
|
||||||
|
LIRC.2 KEY_2
|
||||||
|
LIRC.3 KEY_3
|
||||||
|
LIRC.4 KEY_4
|
||||||
|
LIRC.5 KEY_5
|
||||||
|
LIRC.6 KEY_6
|
||||||
|
LIRC.7 KEY_7
|
||||||
|
LIRC.8 KEY_8
|
||||||
|
LIRC.9 KEY_9
|
||||||
|
LIRC.Info KEY_INFO
|
||||||
|
LIRC.Play KEY_PLAY
|
||||||
|
LIRC.Pause KEY_PAUSE
|
||||||
|
LIRC.Play/Pause KEY_PLAYPAUSE
|
||||||
|
LIRC.Stop KEY_STOP
|
||||||
|
LIRC.Record KEY_RECORD
|
||||||
|
LIRC.FastFwd KEY_FASTFORWARD
|
||||||
|
LIRC.FastRew KEY_REWIND
|
||||||
|
LIRC.Next KEY_NEXT
|
||||||
|
LIRC.Prev KEY_BACK
|
||||||
|
LIRC.Power KEY_POWER2
|
||||||
|
LIRC.Channel+ KEY_CHANNELUP
|
||||||
|
LIRC.Channel- KEY_CHANNELDOWN
|
||||||
|
LIRC.PrevChannel KEY_PREVIOUS
|
||||||
|
LIRC.Volume+ KEY_VOLUMEUP
|
||||||
|
LIRC.Volume- KEY_VOLUMEDOWN
|
||||||
|
LIRC.Mute KEY_MUTE
|
||||||
|
LIRC.Subtitles KEY_SUBTITLE
|
||||||
|
LIRC.Schedule KEY_EPG
|
||||||
|
LIRC.Channels KEY_CHANNEL
|
||||||
|
LIRC.Commands KEY_FAVORITES
|
||||||
|
LIRC.Audio KEY_MODE
|
||||||
|
LIRC.Timers KEY_TIME
|
||||||
|
LIRC.Recordings KEY_PVR
|
||||||
|
LIRC.Setup KEY_SETUP
|
||||||
|
LIRC.User0 KEY_TEXT
|
||||||
|
LIRC.User1 KEY_PROG1
|
||||||
|
LIRC.User2 KEY_PROG2
|
||||||
|
LIRC.User3 KEY_PROG3
|
||||||
|
LIRC.User4 KEY_PROG4
|
||||||
|
LIRC.User5 KEY_AUDIO
|
||||||
|
LIRC.User6 KEY_VIDEO
|
||||||
|
LIRC.User7 KEY_IMAGES
|
||||||
|
LIRC.User8 KEY_FN
|
||||||
|
LIRC.User9 KEY_SCREEN
|
||||||
|
|
||||||
|
XKeySym.Up Up
|
||||||
|
XKeySym.Down Down
|
||||||
|
XKeySym.Menu Home
|
||||||
|
XKeySym.Menu Tab
|
||||||
|
XKeySym.Menu KP_Home
|
||||||
|
XKeySym.Ok Return
|
||||||
|
XKeySym.Ok KP_Enter
|
||||||
|
XKeySym.Back BackSpace
|
||||||
|
XKeySym.Back KP_Separator
|
||||||
|
XKeySym.Left Left
|
||||||
|
XKeySym.Right Right
|
||||||
|
XKeySym.Up KP_Up
|
||||||
|
XKeySym.Down KP_Down
|
||||||
|
XKeySym.Left KP_Left
|
||||||
|
XKeySym.Right KP_Right
|
||||||
|
XKeySym.Red F1
|
||||||
|
XKeySym.Green F2
|
||||||
|
XKeySym.Yellow F3
|
||||||
|
XKeySym.Blue F4
|
||||||
|
XKeySym.0 0
|
||||||
|
XKeySym.1 1
|
||||||
|
XKeySym.2 2
|
||||||
|
XKeySym.3 3
|
||||||
|
XKeySym.4 4
|
||||||
|
XKeySym.5 5
|
||||||
|
XKeySym.6 6
|
||||||
|
XKeySym.7 7
|
||||||
|
XKeySym.8 8
|
||||||
|
XKeySym.9 9
|
||||||
|
XKeySym.0 KP_0
|
||||||
|
XKeySym.1 KP_1
|
||||||
|
XKeySym.2 KP_2
|
||||||
|
XKeySym.3 KP_3
|
||||||
|
XKeySym.4 KP_4
|
||||||
|
XKeySym.5 KP_5
|
||||||
|
XKeySym.6 KP_6
|
||||||
|
XKeySym.7 KP_7
|
||||||
|
XKeySym.8 KP_8
|
||||||
|
XKeySym.9 KP_9
|
||||||
|
XKeySym.Info End
|
||||||
|
XKeySym.Info KP_End
|
||||||
|
XKeySym.Pause F9
|
||||||
|
XKeySym.FastFwd F6
|
||||||
|
XKeySym.FastRew F5
|
||||||
|
XKeySym.Power Pause
|
||||||
|
XKeySym.Volume+ F12
|
||||||
|
XKeySym.Volume- F11
|
||||||
|
XKeySym.Volume+ KP_Add
|
||||||
|
XKeySym.Volume- KP_Subtract
|
||||||
|
XKeySym.Mute F10
|
||||||
|
XKeySym.User1 F5
|
||||||
|
XKeySym.User2 F6
|
||||||
|
XKeySym.User3 F7
|
||||||
|
XKeySym.User4 F8
|
||||||
|
XKeySym.User5 Print
|
||||||
|
XKeySym.User6 Scroll_Lock
|
||||||
|
XKeySym.User7 Insert
|
||||||
|
XKeySym.User8 KP_Divide
|
||||||
|
XKeySym.User9 KP_Multiply
|
||||||
|
XKeySym.Audio Menu
|
||||||
|
XKeySym.Channel+ Prior
|
||||||
|
XKeySym.Channel- Next
|
||||||
|
XKeySym.Channel+ KP_Prior
|
||||||
|
XKeySym.Channel- KP_Next
|
||||||
|
XKeySym.Volume+ XF86AudioRaiseVolume
|
||||||
|
XKeySym.Volume- XF86AudioLowerVolume
|
||||||
|
XKeySym.Mute XF86AudioMute
|
||||||
|
XKeySym.Stop XF86AudioStop
|
||||||
|
XKeySym.Play/Pause XF86AudioPlay
|
||||||
|
XKeySym.Prev XF86AudioPrev
|
||||||
|
XKeySym.Next XF86AudioNext
|
@ -10,19 +10,14 @@
|
|||||||
- vdr
|
- vdr
|
||||||
- vdrctl
|
- vdrctl
|
||||||
- vdr-plugin-dbus2vdr
|
- vdr-plugin-dbus2vdr
|
||||||
|
- name: add svdrp and svdrp-disc to /etc/services
|
||||||
- name: add svdrp to /etc/services
|
|
||||||
lineinfile:
|
lineinfile:
|
||||||
dest: /etc/services
|
dest: /etc/services
|
||||||
state: present
|
state: present
|
||||||
line: "svdrp 6419/tcp"
|
line: "{{ item }}"
|
||||||
|
with_items:
|
||||||
- name: add svdrp-disc to /etc/services
|
- "svdrp 6419/tcp"
|
||||||
lineinfile:
|
- "svdrp-disc 6419/udp"
|
||||||
dest: /etc/services
|
|
||||||
state: present
|
|
||||||
line: "svdrp-disc 6419/udp"
|
|
||||||
|
|
||||||
- name: create vdr recdir
|
- name: create vdr recdir
|
||||||
file:
|
file:
|
||||||
state: directory
|
state: directory
|
||||||
@ -52,7 +47,6 @@
|
|||||||
vdr.hide_first_recording_level
|
vdr.hide_first_recording_level
|
||||||
|
|
||||||
# TODO: set recdir, user etc. in /etc/vdr/conf.d/
|
# TODO: set recdir, user etc. in /etc/vdr/conf.d/
|
||||||
|
|
||||||
- name: apt | install additional vdr plugins
|
- name: apt | install additional vdr plugins
|
||||||
apt:
|
apt:
|
||||||
name: '{{ item }}'
|
name: '{{ item }}'
|
||||||
@ -61,3 +55,26 @@
|
|||||||
with_items:
|
with_items:
|
||||||
'{{ vdr_plugins | default({}) }}'
|
'{{ vdr_plugins | default({}) }}'
|
||||||
notify: [ 'Restart VDR' ]
|
notify: [ 'Restart VDR' ]
|
||||||
|
- name: ensure vdr is stopped
|
||||||
|
systemd:
|
||||||
|
name: vdr.service
|
||||||
|
state: stopped
|
||||||
|
notify: [ 'Start VDR' ]
|
||||||
|
|
||||||
|
- name: "vdr configuration | copy remote.conf if it doesn't exist yet"
|
||||||
|
copy:
|
||||||
|
src: files/remote.conf
|
||||||
|
dest: '{{ vdr.confdir }}/remote.conf'
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
mode: 0644
|
||||||
|
force: no
|
||||||
|
|
||||||
|
- name: "vdr configuration | copy keymacros.conf if it doesn't exist yet"
|
||||||
|
copy:
|
||||||
|
src: files/keymacros.conf
|
||||||
|
dest: '{{ vdr.confdir }}/keymacros.conf'
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
mode: 0644
|
||||||
|
force: no
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
# file: roles/yavdr-common/defaults/main.yml
|
|
||||||
|
|
||||||
|
# file: roles/yavdr-common/defaults/main.yml
|
||||||
branch: unstable
|
branch: unstable
|
||||||
repositories:
|
repositories:
|
||||||
- 'ppa:yavdr/main'
|
- 'ppa:yavdr/main'
|
||||||
@ -8,16 +8,13 @@ repositories:
|
|||||||
- 'ppa:yavdr/{{branch}}-vdr'
|
- 'ppa:yavdr/{{branch}}-vdr'
|
||||||
- 'ppa:yavdr/{{branch}}-kodi'
|
- 'ppa:yavdr/{{branch}}-kodi'
|
||||||
- 'ppa:yavdr/{{branch}}-yavdr'
|
- 'ppa:yavdr/{{branch}}-yavdr'
|
||||||
|
|
||||||
drivers:
|
drivers:
|
||||||
sundtek: auto
|
sundtek: auto
|
||||||
ddvb-dkms: auto
|
ddvb-dkms: auto
|
||||||
|
|
||||||
extra_packages:
|
extra_packages:
|
||||||
- vim
|
- vim
|
||||||
- tree
|
- tree
|
||||||
- w-scan
|
- w-scan
|
||||||
|
|
||||||
vdr:
|
vdr:
|
||||||
user: vdr
|
user: vdr
|
||||||
group: vdr
|
group: vdr
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
// {{ ansible_managed_file }}
|
|
||||||
// Recommends are as of now still abused in many packages
|
|
||||||
APT::Install-Recommends "0";
|
|
||||||
APT::Install-Suggests "0";
|
|
@ -1,18 +1,13 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
# This playbook sets up the basic packages an directories for a yaVDR installation
|
|
||||||
# file: roles/yavdr-common/tasks/main.yml
|
|
||||||
|
|
||||||
- name: apt | prevent automatic installation of recommended packages
|
- name: apt | prevent automatic installation of recommended packages
|
||||||
template:
|
template:
|
||||||
src: templates/90-norecommends.j2
|
src: templates/90-norecommends.j2
|
||||||
dest: /etc/apt/apt.conf.d/90norecommends
|
dest: /etc/apt/apt.conf.d/90norecommends
|
||||||
|
|
||||||
- name: use bash instead of dash
|
- name: use bash instead of dash
|
||||||
shell: |
|
shell: |
|
||||||
echo "set dash/sh false" | debconf-communicate
|
echo "set dash/sh false" | debconf-communicate
|
||||||
dpkg-reconfigure -f noninteractive dash
|
dpkg-reconfigure -f noninteractive dash
|
||||||
|
|
||||||
- name: create vdr group
|
- name: create vdr group
|
||||||
group:
|
group:
|
||||||
gid: '{{ vdr.gid }}'
|
gid: '{{ vdr.gid }}'
|
||||||
@ -28,7 +23,6 @@
|
|||||||
shell: '/bin/bash'
|
shell: '/bin/bash'
|
||||||
state: present
|
state: present
|
||||||
append: true
|
append: true
|
||||||
|
|
||||||
- name: disable release-upgrade notifications
|
- name: disable release-upgrade notifications
|
||||||
lineinfile:
|
lineinfile:
|
||||||
dest: /etc/update-manager/release-upgrades
|
dest: /etc/update-manager/release-upgrades
|
||||||
@ -36,7 +30,6 @@
|
|||||||
state: present
|
state: present
|
||||||
regexp: '^(Prompt=).*$'
|
regexp: '^(Prompt=).*$'
|
||||||
line: '\1never'
|
line: '\1never'
|
||||||
|
|
||||||
- name: add yaVDR PPAs
|
- name: add yaVDR PPAs
|
||||||
apt_repository:
|
apt_repository:
|
||||||
repo: '{{ item }}'
|
repo: '{{ item }}'
|
||||||
@ -48,7 +41,6 @@
|
|||||||
apt:
|
apt:
|
||||||
upgrade: dist
|
upgrade: dist
|
||||||
update_cache: yes
|
update_cache: yes
|
||||||
|
|
||||||
- name: apt | install basic packages
|
- name: apt | install basic packages
|
||||||
apt:
|
apt:
|
||||||
name: '{{ item }}'
|
name: '{{ item }}'
|
||||||
@ -58,7 +50,8 @@
|
|||||||
- anacron
|
- anacron
|
||||||
- at
|
- at
|
||||||
- bash-completion
|
- bash-completion
|
||||||
- biosdevname
|
#- biosdevname # caution: may change device names after a minimal installation!
|
||||||
|
- debconf-utils
|
||||||
- linux-firmware
|
- linux-firmware
|
||||||
- psmisc
|
- psmisc
|
||||||
- python-kmodpy
|
- python-kmodpy
|
||||||
@ -66,12 +59,10 @@
|
|||||||
- python3-usb
|
- python3-usb
|
||||||
- software-properties-common
|
- software-properties-common
|
||||||
- ssh
|
- ssh
|
||||||
- ubuntu-drivers-common
|
|
||||||
- wget
|
- wget
|
||||||
- wpasupplicant
|
- wpasupplicant
|
||||||
- usbutils
|
- usbutils
|
||||||
- xfsprogs
|
- xfsprogs
|
||||||
|
|
||||||
- name: apt | install extra packages
|
- name: apt | install extra packages
|
||||||
apt:
|
apt:
|
||||||
name: '{{ item }}'
|
name: '{{ item }}'
|
||||||
@ -79,7 +70,6 @@
|
|||||||
install_recommends: no
|
install_recommends: no
|
||||||
with_items:
|
with_items:
|
||||||
'{{ extra_packages }}'
|
'{{ extra_packages }}'
|
||||||
|
|
||||||
- name: get information about usb and pci hardware and loaded kernel modules
|
- name: get information about usb and pci hardware and loaded kernel modules
|
||||||
hardware_facts:
|
hardware_facts:
|
||||||
usb: True
|
usb: True
|
||||||
@ -98,7 +88,6 @@
|
|||||||
- debug:
|
- debug:
|
||||||
var: gpus
|
var: gpus
|
||||||
verbosity: 1
|
verbosity: 1
|
||||||
|
|
||||||
- name: create media directories
|
- name: create media directories
|
||||||
file:
|
file:
|
||||||
dest: '{{ item.value }}'
|
dest: '{{ item.value }}'
|
||||||
|
11
roles/yavdr-network/avahi/service.j2
Normal file
11
roles/yavdr-network/avahi/service.j2
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" standalone='no'?>
|
||||||
|
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
|
||||||
|
<service-group>
|
||||||
|
<name replace-wildcards="yes">{{ item.value|capitalize }} on %h</name> ## Name
|
||||||
|
<service>
|
||||||
|
<type>_nfs._tcp</type>
|
||||||
|
<port>2049</port>
|
||||||
|
<txt-record>path={{ item.value }}</txt-record> ## path to shared Folder
|
||||||
|
<txt-record>subtype={% 'vdr' if item == 'recordings' else item %}</txt-record> ## subtype
|
||||||
|
</service>
|
||||||
|
</service-group>
|
@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
# this playbook sets up network services for a yaVDR installation
|
# this playbook sets up network services for a yaVDR installation
|
||||||
#
|
|
||||||
- name: install network packages
|
- name: apt |install packages for network services
|
||||||
apt:
|
apt:
|
||||||
name: '{{ item }}'
|
name: '{{ item }}'
|
||||||
state: present
|
state: present
|
||||||
@ -20,3 +20,42 @@
|
|||||||
# shell: 'ethtool {{ item }} | grep -Po "(?<=Supports\sWake-on:\s).*$"'
|
# shell: 'ethtool {{ item }} | grep -Po "(?<=Supports\sWake-on:\s).*$"'
|
||||||
# register: wol
|
# register: wol
|
||||||
# with_items: '{% for interface in ansible_interfaces if interface != 'lo' and interface != 'bond0' %}'
|
# with_items: '{% for interface in ansible_interfaces if interface != 'lo' and interface != 'bond0' %}'
|
||||||
|
|
||||||
|
- name: restart autofs if running
|
||||||
|
systemd:
|
||||||
|
name: autofs
|
||||||
|
state: restarted
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
|
||||||
|
- name: ensure autofs is running
|
||||||
|
systemd:
|
||||||
|
name: autofs
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
|
||||||
|
- name: restart avahi-linker if running
|
||||||
|
systemd:
|
||||||
|
name: avahi-linker
|
||||||
|
state: restarted
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
|
||||||
|
- name: start avahi-linker
|
||||||
|
systemd:
|
||||||
|
name: avahi-linker
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
|
||||||
|
- name: enable and start additional services for avahi-linker
|
||||||
|
systemd:
|
||||||
|
name: '{{ item }}'
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
with_items:
|
||||||
|
- vdr-net-monitor
|
||||||
|
- vdr-update-monitor
|
||||||
|
- prevent-umount-on-pause
|
||||||
|
@ -1,24 +1,35 @@
|
|||||||
---
|
---
|
||||||
# This role is used to set up the yaVDR remote control configuration.
|
# This role is used to set up the yaVDR remote control configuration.
|
||||||
|
|
||||||
- name: install yavdr-remote
|
- name: apt | install yavdr-remote
|
||||||
apt:
|
apt:
|
||||||
name: yavdr-remote
|
name: yavdr-remote
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: install lirc
|
- name: apt | install eventlircd
|
||||||
|
apt:
|
||||||
|
name: eventlircd
|
||||||
|
state: present
|
||||||
|
when:
|
||||||
|
install_eventlircd is defined and install_eventlircd
|
||||||
|
|
||||||
|
- name: apt | install lirc
|
||||||
apt:
|
apt:
|
||||||
name: lircd
|
name: lircd
|
||||||
state: present
|
state: present
|
||||||
when:
|
when:
|
||||||
- install_lircd is defined and install_lircd
|
- install_lircd is defined and install_lircd
|
||||||
|
|
||||||
- name: install eventlircd
|
- name: stop, mask and disable lircd.socket and lircd.service # (the default lirc configuration conflicts with eventlircd)
|
||||||
apt:
|
systemd:
|
||||||
name: eventlircd
|
name: '{{ item }}'
|
||||||
state: present
|
enabled: no
|
||||||
when:
|
state: stopped
|
||||||
install_eventlircd is defined and install_eventlircd
|
masked: yes
|
||||||
|
with_items:
|
||||||
|
- lircd.service
|
||||||
|
- lircd.socket
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
# TODO: upload lircd2uinput package to PPA
|
# TODO: upload lircd2uinput package to PPA
|
||||||
#- name: install lircd2uinput
|
#- name: install lircd2uinput
|
||||||
|
51
roles/yavdr-xorg/read_xrandr.py
Normal file
51
roles/yavdr-xorg/read_xrandr.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#!/usr/bin/ env python3
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
|
xrandr_data = subprocess.check_output(['xrandr', '-q'], universal_newlines=True)
|
||||||
|
|
||||||
|
|
||||||
|
def print_modelines(resolutions):
|
||||||
|
if resolutions:
|
||||||
|
for resolution, refreshrates in reversed(sorted(resolutions.items())):
|
||||||
|
for refreshrate in refreshrates:
|
||||||
|
print("{}_{}".format(resolution, refreshrate))
|
||||||
|
|
||||||
|
|
||||||
|
def cleanup_refreshrate(refreshrate):
|
||||||
|
return refreshrate.replace('+', '').replace('*', '')
|
||||||
|
|
||||||
|
resolutions = {}
|
||||||
|
for line in xrandr_data.splitlines():
|
||||||
|
if line.startswith('Screen'):
|
||||||
|
print_modelines(resolutions)
|
||||||
|
new_connection = False
|
||||||
|
screen = line.split(':', maxsplit=1)[0].split()[-1]
|
||||||
|
new_screen = True
|
||||||
|
print('Screen: {}'.format(screen))
|
||||||
|
|
||||||
|
elif new_screen and not new_connection and ' connected ' in line:
|
||||||
|
connection = line.split()[0]
|
||||||
|
new_screen = False
|
||||||
|
new_connection = True
|
||||||
|
print('Connection: {}'.format(connection))
|
||||||
|
resolutions = {}
|
||||||
|
|
||||||
|
elif new_connection and line.startswith(' '):
|
||||||
|
resolution, *refreshrates = line.split()
|
||||||
|
res_x, res_y = resolution.split('x')
|
||||||
|
resolution = (int(res_x), int(res_y))
|
||||||
|
r = []
|
||||||
|
for refreshrate in refreshrates:
|
||||||
|
if '+' in refreshrate:
|
||||||
|
current_mode = (resolution,
|
||||||
|
cleanup_refreshrate(refreshrate))
|
||||||
|
print('Current Mode: {}@{}'.format(*current_mode))
|
||||||
|
if '*' in refreshrate:
|
||||||
|
preferred_mode = (resolution,
|
||||||
|
cleanup_refreshrate(refreshrate))
|
||||||
|
print('Preferred Mode: {}@{}'.format(*preferred_mode))
|
||||||
|
r.append(cleanup_refreshrate(refreshrate))
|
||||||
|
resolutions[resolution] = r
|
||||||
|
|
||||||
|
print_modelines(resolutions)
|
@ -1,6 +1,24 @@
|
|||||||
---
|
---
|
||||||
# file: roles/yavdr-xorg/tasks/main.yml
|
# file: roles/yavdr-xorg/tasks/main.yml
|
||||||
|
|
||||||
|
# TODO: use hooks or requirements instead
|
||||||
|
- name: Stop VDR
|
||||||
|
systemd:
|
||||||
|
name: vdr.service
|
||||||
|
state: stopped
|
||||||
|
enabled: yes
|
||||||
|
notify: ['Start VDR']
|
||||||
|
|
||||||
|
- name: create directory /etc/systemd/system/vdr.service.d/
|
||||||
|
file:
|
||||||
|
dest: /etc/systemd/system/vdr.service.d/
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: add environment file for vdr.service
|
||||||
|
template:
|
||||||
|
src: templates/systemd/vdr-environ.j2
|
||||||
|
dest: /etc/systemd/system/vdr.service.d/load-environ.conf
|
||||||
|
|
||||||
- name: install packages for xorg
|
- name: install packages for xorg
|
||||||
apt:
|
apt:
|
||||||
name: '{{ item }}'
|
name: '{{ item }}'
|
||||||
@ -12,18 +30,32 @@
|
|||||||
- xlogin
|
- xlogin
|
||||||
- xterm
|
- xterm
|
||||||
- openbox
|
- openbox
|
||||||
|
- tmux
|
||||||
|
- kiosk-browser
|
||||||
|
- read-edid
|
||||||
#- yavdr-xorg
|
#- yavdr-xorg
|
||||||
|
|
||||||
- name: "stop x@vt7.service"
|
- name: Stop xlogin
|
||||||
systemd:
|
systemd:
|
||||||
name: "x@vt7.service"
|
name: xlogin@vdr.service
|
||||||
|
state: stopped
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Stop x
|
||||||
|
systemd:
|
||||||
|
name: x@vt7.service
|
||||||
state: stopped
|
state: stopped
|
||||||
|
|
||||||
- name: "expand template for x-verbose@.service"
|
- name: "expand template for x-verbose@.service"
|
||||||
template:
|
template:
|
||||||
src: "templates/x-verbose@.service.j2"
|
src: "templates/systemd/system/x-verbose@.service.j2"
|
||||||
dest: "/etc/systemd/system/x-verbose@.service"
|
dest: "/etc/systemd/system/x-verbose@.service"
|
||||||
|
|
||||||
|
- name: "expand template for xorg-verbose.conf"
|
||||||
|
template:
|
||||||
|
src: "templates/xorg-verbose.conf.j2"
|
||||||
|
dest: "/etc/X11/xorg-verbose.conf"
|
||||||
|
|
||||||
- name: "start x-verbose@.service"
|
- name: "start x-verbose@.service"
|
||||||
systemd:
|
systemd:
|
||||||
name: "x-verbose@vt7.service"
|
name: "x-verbose@vt7.service"
|
||||||
@ -39,6 +71,13 @@
|
|||||||
- name: "detect xorg configuration"
|
- name: "detect xorg configuration"
|
||||||
action: xrandr_facts
|
action: xrandr_facts
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
var: xorg.primary
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
var: xorg.secondary
|
||||||
|
when: xorg.secondary is defined
|
||||||
|
|
||||||
- name: "stop x-verbose@vt7.service"
|
- name: "stop x-verbose@vt7.service"
|
||||||
systemd:
|
systemd:
|
||||||
name: "x-verbose@vt7.service"
|
name: "x-verbose@vt7.service"
|
||||||
@ -46,7 +85,15 @@
|
|||||||
enabled: false
|
enabled: false
|
||||||
masked: true
|
masked: true
|
||||||
|
|
||||||
### TODO: Create xorg configuration
|
# TODO: expand template for xorg.conf (or snippets)
|
||||||
|
# with respect for the available graphics card driver
|
||||||
|
# nvidia, noveau, intel, radeon
|
||||||
|
|
||||||
|
- name: create xorg.conf (for nvidia driver)
|
||||||
|
template:
|
||||||
|
src: templates/xorg.conf.j2
|
||||||
|
dest: /etc/X11/xorg.conf
|
||||||
|
backup: yes
|
||||||
|
|
||||||
- name: create folders for user session
|
- name: create folders for user session
|
||||||
file:
|
file:
|
||||||
@ -57,9 +104,8 @@
|
|||||||
group: '{{ vdr.group }}'
|
group: '{{ vdr.group }}'
|
||||||
with_items:
|
with_items:
|
||||||
- '{{ vdr.home }}/.config/systemd/user'
|
- '{{ vdr.home }}/.config/systemd/user'
|
||||||
- '{{ vdr.home }}/.config/openbox/autostart'
|
- '{{ vdr.home }}/.config/openbox/'
|
||||||
|
|
||||||
### TODO: move to yavdr-xorg package? ###
|
|
||||||
- name: create folder for customizations of vdr.service
|
- name: create folder for customizations of vdr.service
|
||||||
file:
|
file:
|
||||||
state: directory
|
state: directory
|
||||||
@ -70,24 +116,60 @@
|
|||||||
template:
|
template:
|
||||||
src: templates/vdr-xorg.conf
|
src: templates/vdr-xorg.conf
|
||||||
dest: /etc/systemd/system/vdr.service.d/
|
dest: /etc/systemd/system/vdr.service.d/
|
||||||
### END TODO ###
|
|
||||||
|
|
||||||
- name: create .xinitrc for vdr user
|
- name: create folders for user configuration files
|
||||||
|
file:
|
||||||
|
state: directory
|
||||||
|
dest: '{{ item }}'
|
||||||
|
mode: '0775'
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
with_items:
|
||||||
|
- '{{ vdr.home }}/.config/systemd/user'
|
||||||
|
- '{{ vdr.home }}/.config/openbox'
|
||||||
|
- '{{ vdr.home }}/.config/pulse'
|
||||||
|
|
||||||
|
- name: expand template for .xinitrc for vdr user
|
||||||
template:
|
template:
|
||||||
src: 'templates/.xinitrc.j2'
|
src: 'templates/.xinitrc.j2'
|
||||||
dest: '/var/lib/vdr/.xinitrc'
|
dest: '{{ vdr.home }}/.xinitrc'
|
||||||
mode: 0755
|
mode: 0755
|
||||||
owner: '{{ vdr.user }}'
|
owner: '{{ vdr.user }}'
|
||||||
group: '{{ vdr.group }}'
|
group: '{{ vdr.group }}'
|
||||||
|
|
||||||
- name: populate autostart for openbox
|
- name: expand template for openbox autostart
|
||||||
template:
|
template:
|
||||||
src: 'templates/autostart.j2'
|
src: 'templates/openbox/autostart.j2'
|
||||||
dest: '/var/lib/vdr/.config/openbox/autostart'
|
dest: '{{ vdr.home }}/.config/openbox/autostart'
|
||||||
mode: 0755
|
mode: 0755
|
||||||
owner: '{{ vdr.user }}'
|
owner: '{{ vdr.user }}'
|
||||||
group: '{{ vdr.group }}'
|
group: '{{ vdr.group }}'
|
||||||
|
|
||||||
|
- name: expand rc.xml for openbox
|
||||||
|
template:
|
||||||
|
src: 'templates/openbox/rc.xml.j2'
|
||||||
|
dest: '{{ vdr.home }}/.config/openbox/rc.xml'
|
||||||
|
mode: 0755
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
|
||||||
|
- name: create yavdr-desktop.target for the user session
|
||||||
|
template:
|
||||||
|
src: 'templates/systemd/user/yavdr-desktop.target.j2'
|
||||||
|
dest: '{{ vdr.home }}/.config/systemd/user/yavdr-desktop.target'
|
||||||
|
mode: 0755
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
|
||||||
|
- name: disable pulseaudio autospawning
|
||||||
|
lineinfile:
|
||||||
|
path: '{{ vdr.home }}/.config/pulse/client.conf'
|
||||||
|
line: 'autospawn = no'
|
||||||
|
create: yes
|
||||||
|
state: present
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
|
||||||
- name: set a login shell for the user vdr
|
- name: set a login shell for the user vdr
|
||||||
user:
|
user:
|
||||||
name: '{{ vdr.user }}'
|
name: '{{ vdr.user }}'
|
||||||
@ -97,6 +179,11 @@
|
|||||||
groups: '{{ vdr.group }}'
|
groups: '{{ vdr.group }}'
|
||||||
append: yes
|
append: yes
|
||||||
|
|
||||||
|
- name: create tmux.service for the session
|
||||||
|
template:
|
||||||
|
src: roles/yavdr-xorg/templates/systemd/user/tmux.service.j2
|
||||||
|
dest: '{{ vdr.home }}/.config/systemd/user/tmux.service'
|
||||||
|
|
||||||
- name: enable and start xlogin for the user vdr
|
- name: enable and start xlogin for the user vdr
|
||||||
systemd:
|
systemd:
|
||||||
daemon_reload: yes
|
daemon_reload: yes
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
env | grep "DISPLAY\|DBUS_SESSION_BUS_ADDRESS\|XDG_RUNTIME_DIR" > ~/.session-env
|
|
||||||
systemctl --user import-environment
|
|
24
roles/yavdr-xorg/templates/openbox/autostart.j2
Executable file
24
roles/yavdr-xorg/templates/openbox/autostart.j2
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# forward environment variables to an environment file and the systemd user session
|
||||||
|
env | grep "DISPLAY\|DBUS_SESSION_BUS_ADDRESS\|XDG_RUNTIME_DIR" > ~/.session-env
|
||||||
|
systemctl --user import-environment DISPLAY XAUTHORITY XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
|
||||||
|
|
||||||
|
enabled_services=("tmux.service" "detect-second-display.service" "openbox-second.service" "osd2web.service")
|
||||||
|
disabled_services=()
|
||||||
|
|
||||||
|
# enable configured services for the user session
|
||||||
|
for service in "${enabled_services[@]}"; do
|
||||||
|
systemctl --user enable "$service"
|
||||||
|
done
|
||||||
|
|
||||||
|
# disable unwanted services for the user session
|
||||||
|
for service in "${disabled_services[@]}"; do
|
||||||
|
systemctl --user disable "$service"
|
||||||
|
done
|
||||||
|
|
||||||
|
if which dbus-update-activation-environment >/dev/null 2>&1; then
|
||||||
|
dbus-update-activation-environment DISPLAY XAUTHORITY XDG_RUNTIME_DIR
|
||||||
|
fi
|
||||||
|
|
||||||
|
# start systemd units for the yavdr user session
|
||||||
|
systemctl --user isolate yavdr-desktop.target
|
816
roles/yavdr-xorg/templates/openbox/rc.xml.j2
Normal file
816
roles/yavdr-xorg/templates/openbox/rc.xml.j2
Normal file
@ -0,0 +1,816 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||||
|
<!-- Do not edit this file, it will be overwritten on install.
|
||||||
|
Copy the file to $HOME/.config/openbox/ instead. -->
|
||||||
|
<resistance>
|
||||||
|
<strength>10</strength>
|
||||||
|
<screen_edge_strength>20</screen_edge_strength>
|
||||||
|
</resistance>
|
||||||
|
<focus>
|
||||||
|
<focusNew>yes</focusNew>
|
||||||
|
<!-- always try to focus new windows when they appear. other rules do
|
||||||
|
apply -->
|
||||||
|
<followMouse>no</followMouse>
|
||||||
|
<!-- move focus to a window when you move the mouse into it -->
|
||||||
|
<focusLast>yes</focusLast>
|
||||||
|
<!-- focus the last used window when changing desktops, instead of the one
|
||||||
|
under the mouse pointer. when followMouse is enabled -->
|
||||||
|
<underMouse>no</underMouse>
|
||||||
|
<!-- move focus under the mouse, even when the mouse is not moving -->
|
||||||
|
<focusDelay>200</focusDelay>
|
||||||
|
<!-- when followMouse is enabled, the mouse must be inside the window for
|
||||||
|
this many milliseconds (1000 = 1 sec) before moving focus to it -->
|
||||||
|
<raiseOnFocus>no</raiseOnFocus>
|
||||||
|
<!-- when followMouse is enabled, and a window is given focus by moving the
|
||||||
|
mouse into it, also raise the window -->
|
||||||
|
</focus>
|
||||||
|
<placement>
|
||||||
|
<policy>Smart</policy>
|
||||||
|
<!-- 'Smart' or 'UnderMouse' -->
|
||||||
|
<center>yes</center>
|
||||||
|
<!-- whether to place windows in the center of the free area found or
|
||||||
|
the top left corner -->
|
||||||
|
<monitor>Active</monitor>
|
||||||
|
<!-- with Smart placement on a multi-monitor system, try to place new windows
|
||||||
|
on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
|
||||||
|
the active window is, 'Primary' - only on the primary monitor -->
|
||||||
|
<primaryMonitor>Active</primaryMonitor>
|
||||||
|
<!-- The monitor where Openbox should place popup dialogs such as the
|
||||||
|
focus cycling popup, or the desktop switch popup. It can be an index
|
||||||
|
from 1, specifying a particular monitor. Or it can be one of the
|
||||||
|
following: 'Mouse' - where the mouse is, or
|
||||||
|
'Active' - where the active window is -->
|
||||||
|
</placement>
|
||||||
|
<theme>
|
||||||
|
<name>Onyx</name>
|
||||||
|
<titleLayout>NLIMC</titleLayout>
|
||||||
|
<!--
|
||||||
|
available characters are NDSLIMC, each can occur at most once.
|
||||||
|
N: window icon
|
||||||
|
L: window label (AKA title).
|
||||||
|
I: iconify
|
||||||
|
M: maximize
|
||||||
|
C: close
|
||||||
|
S: shade (roll up/down)
|
||||||
|
D: omnipresent (on all desktops).
|
||||||
|
-->
|
||||||
|
<keepBorder>yes</keepBorder>
|
||||||
|
<animateIconify>yes</animateIconify>
|
||||||
|
<font place="ActiveWindow">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>8</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="InactiveWindow">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>8</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="MenuHeader">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>normal</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="MenuItem">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>normal</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="ActiveOnScreenDisplay">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="InactiveOnScreenDisplay">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
</theme>
|
||||||
|
<desktops>
|
||||||
|
<!-- this stuff is only used at startup, pagers allow you to change them
|
||||||
|
during a session
|
||||||
|
|
||||||
|
these are default values to use when other ones are not already set
|
||||||
|
by other applications, or saved in your session
|
||||||
|
|
||||||
|
use obconf if you want to change these without having to log out
|
||||||
|
and back in -->
|
||||||
|
<number>2</number>
|
||||||
|
<firstdesk>1</firstdesk>
|
||||||
|
<names>
|
||||||
|
<!-- set names up here if you want to, like this:
|
||||||
|
<name>desktop 1</name>
|
||||||
|
<name>desktop 2</name>
|
||||||
|
-->
|
||||||
|
</names>
|
||||||
|
<popupTime>875</popupTime>
|
||||||
|
<!-- The number of milliseconds to show the popup for when switching
|
||||||
|
desktops. Set this to 0 to disable the popup. -->
|
||||||
|
</desktops>
|
||||||
|
<resize>
|
||||||
|
<drawContents>yes</drawContents>
|
||||||
|
<popupShow>Nonpixel</popupShow>
|
||||||
|
<!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
|
||||||
|
<popupPosition>Center</popupPosition>
|
||||||
|
<!-- 'Center', 'Top', or 'Fixed' -->
|
||||||
|
<popupFixedPosition>
|
||||||
|
<!-- these are used if popupPosition is set to 'Fixed' -->
|
||||||
|
<x>10</x>
|
||||||
|
<!-- positive number for distance from left edge, negative number for
|
||||||
|
distance from right edge, or 'Center' -->
|
||||||
|
<y>10</y>
|
||||||
|
<!-- positive number for distance from top edge, negative number for
|
||||||
|
distance from bottom edge, or 'Center' -->
|
||||||
|
</popupFixedPosition>
|
||||||
|
</resize>
|
||||||
|
<!-- You can reserve a portion of your screen where windows will not cover when
|
||||||
|
they are maximized, or when they are initially placed.
|
||||||
|
Many programs reserve space automatically, but you can use this in other
|
||||||
|
cases. -->
|
||||||
|
<margins>
|
||||||
|
<top>0</top>
|
||||||
|
<bottom>0</bottom>
|
||||||
|
<left>0</left>
|
||||||
|
<right>0</right>
|
||||||
|
</margins>
|
||||||
|
<dock>
|
||||||
|
<position>TopLeft</position>
|
||||||
|
<!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
|
||||||
|
<floatingX>0</floatingX>
|
||||||
|
<floatingY>0</floatingY>
|
||||||
|
<noStrut>no</noStrut>
|
||||||
|
<stacking>Above</stacking>
|
||||||
|
<!-- 'Above', 'Normal', or 'Below' -->
|
||||||
|
<direction>Vertical</direction>
|
||||||
|
<!-- 'Vertical' or 'Horizontal' -->
|
||||||
|
<autoHide>no</autoHide>
|
||||||
|
<hideDelay>300</hideDelay>
|
||||||
|
<!-- in milliseconds (1000 = 1 second) -->
|
||||||
|
<showDelay>300</showDelay>
|
||||||
|
<!-- in milliseconds (1000 = 1 second) -->
|
||||||
|
<moveButton>Middle</moveButton>
|
||||||
|
<!-- 'Left', 'Middle', 'Right' -->
|
||||||
|
</dock>
|
||||||
|
<keyboard>
|
||||||
|
<chainQuitKey>C-g</chainQuitKey>
|
||||||
|
<!-- Keybindings for desktop switching -->
|
||||||
|
<keybind key="C-A-Left">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>left</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Right">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>right</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Up">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>up</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Down">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>down</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Left">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>left</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Right">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>right</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Up">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>up</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Down">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>down</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-F1">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>1</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-F2">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>2</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-F3">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>3</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-F4">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>4</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-d">
|
||||||
|
<action name="ToggleShowDesktop"/>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for windows -->
|
||||||
|
<keybind key="A-F4">
|
||||||
|
<action name="Close"/>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="A-Escape">
|
||||||
|
<action name="Lower"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="A-space">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Take a screenshot of the current window with scrot when Alt+Print are pressed -->
|
||||||
|
<keybind key="A-Print">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>scrot -s</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for window switching -->
|
||||||
|
<keybind key="A-Tab">
|
||||||
|
<action name="NextWindow">
|
||||||
|
<finalactions>
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</finalactions>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="A-S-Tab">
|
||||||
|
<action name="PreviousWindow">
|
||||||
|
<finalactions>
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</finalactions>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Tab">
|
||||||
|
<action name="NextWindow">
|
||||||
|
<panels>yes</panels>
|
||||||
|
<desktop>yes</desktop>
|
||||||
|
<finalactions>
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</finalactions>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for window switching with the arrow keys -->
|
||||||
|
<keybind key="W-S-Right">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>right</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-S-Left">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>left</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-S-Up">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>up</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-S-Down">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>down</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for running applications -->
|
||||||
|
<keybind key="W-e">
|
||||||
|
<action name="Execute">
|
||||||
|
<startupnotify>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
<name>Konqueror</name>
|
||||||
|
</startupnotify>
|
||||||
|
<command>kfmclient openProfile filemanagement</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Launch scrot when Print is pressed -->
|
||||||
|
<keybind key="Print">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>scrot</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
</keyboard>
|
||||||
|
<mouse>
|
||||||
|
<dragThreshold>1</dragThreshold>
|
||||||
|
<!-- number of pixels the mouse must move before a drag begins -->
|
||||||
|
<doubleClickTime>500</doubleClickTime>
|
||||||
|
<!-- in milliseconds (1000 = 1 second) -->
|
||||||
|
<screenEdgeWarpTime>400</screenEdgeWarpTime>
|
||||||
|
<!-- Time before changing desktops when the pointer touches the edge of the
|
||||||
|
screen while moving a window, in milliseconds (1000 = 1 second).
|
||||||
|
Set this to 0 to disable warping -->
|
||||||
|
<screenEdgeWarpMouse>false</screenEdgeWarpMouse>
|
||||||
|
<!-- Set this to TRUE to move the mouse pointer across the desktop when
|
||||||
|
switching due to hitting the edge of the screen -->
|
||||||
|
<context name="Frame">
|
||||||
|
<mousebind button="A-Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Left" action="Click">
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Left" action="Drag">
|
||||||
|
<action name="Move"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Right" action="Drag">
|
||||||
|
<action name="Resize"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Middle" action="Press">
|
||||||
|
<action name="Lower"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-S-Up" action="Click">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-S-Down" action="Click">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Titlebar">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Move"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="DoubleClick">
|
||||||
|
<action name="ToggleMaximize"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Up" action="Click">
|
||||||
|
<action name="if">
|
||||||
|
<shaded>no</shaded>
|
||||||
|
<then>
|
||||||
|
<action name="Shade"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
<action name="Lower"/>
|
||||||
|
</then>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Down" action="Click">
|
||||||
|
<action name="if">
|
||||||
|
<shaded>yes</shaded>
|
||||||
|
<then>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</then>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="Lower"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Top">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>top</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Left">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>left</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Right">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>right</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Bottom">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>bottom</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="TRCorner BRCorner TLCorner BLCorner">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Client">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Icon">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="AllDesktops">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="ToggleOmnipresent"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Shade">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="ToggleShade"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Iconify">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="Iconify"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Maximize">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="ToggleMaximize"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Click">
|
||||||
|
<action name="ToggleMaximize">
|
||||||
|
<direction>vertical</direction>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Click">
|
||||||
|
<action name="ToggleMaximize">
|
||||||
|
<direction>horizontal</direction>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Close">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="Close"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Desktop">
|
||||||
|
<mousebind button="Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Root">
|
||||||
|
<!-- Menus -->
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-list-combined-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>root-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="MoveResize">
|
||||||
|
<mousebind button="Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
</mouse>
|
||||||
|
<menu>
|
||||||
|
<!-- You can specify more than one menu file in here and they are all loaded,
|
||||||
|
just don't make menu ids clash or, well, it'll be kind of pointless -->
|
||||||
|
<!-- default menu file (or custom one in $HOME/.config/openbox/) -->
|
||||||
|
<!-- system menu files on Debian systems -->
|
||||||
|
<file>/var/lib/openbox/debian-menu.xml</file>
|
||||||
|
<file>menu.xml</file>
|
||||||
|
<hideDelay>200</hideDelay>
|
||||||
|
<!-- if a press-release lasts longer than this setting (in milliseconds), the
|
||||||
|
menu is hidden again -->
|
||||||
|
<middle>no</middle>
|
||||||
|
<!-- center submenus vertically about the parent entry -->
|
||||||
|
<submenuShowDelay>100</submenuShowDelay>
|
||||||
|
<!-- time to delay before showing a submenu after hovering over the parent
|
||||||
|
entry.
|
||||||
|
if this is a negative value, then the delay is infinite and the
|
||||||
|
submenu will not be shown until it is clicked on -->
|
||||||
|
<submenuHideDelay>400</submenuHideDelay>
|
||||||
|
<!-- time to delay before hiding a submenu when selecting another
|
||||||
|
entry in parent menu
|
||||||
|
if this is a negative value, then the delay is infinite and the
|
||||||
|
submenu will not be hidden until a different submenu is opened -->
|
||||||
|
<showIcons>yes</showIcons>
|
||||||
|
<!-- controls if icons appear in the client-list-(combined-)menu -->
|
||||||
|
<manageDesktops>yes</manageDesktops>
|
||||||
|
<!-- show the manage desktops section in the client-list-(combined-)menu -->
|
||||||
|
</menu>
|
||||||
|
<!--
|
||||||
|
# this is an example with comments through out. use these to make your
|
||||||
|
# own rules, but without the comments of course.
|
||||||
|
# you may use one or more of the name/class/role/title/type rules to specify
|
||||||
|
# windows to match
|
||||||
|
|
||||||
|
<application name="the window's _OB_APP_NAME property (see obxprop)"
|
||||||
|
class="the window's _OB_APP_CLASS property (see obxprop)"
|
||||||
|
groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"
|
||||||
|
groupclass="the window's _OB_APP_GROUP_CLASS property (see obxprop)"
|
||||||
|
role="the window's _OB_APP_ROLE property (see obxprop)"
|
||||||
|
title="the window's _OB_APP_TITLE property (see obxprop)"
|
||||||
|
type="the window's _OB_APP_TYPE property (see obxprob)..
|
||||||
|
(if unspecified, then it is 'dialog' for child windows)">
|
||||||
|
# you may set only one of name/class/role/title/type, or you may use more
|
||||||
|
# than one together to restrict your matches.
|
||||||
|
|
||||||
|
# the name, class, role, and title use simple wildcard matching such as those
|
||||||
|
# used by a shell. you can use * to match any characters and ? to match
|
||||||
|
# any single character.
|
||||||
|
|
||||||
|
# the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
|
||||||
|
# or desktop
|
||||||
|
|
||||||
|
# when multiple rules match a window, they will all be applied, in the
|
||||||
|
# order that they appear in this list
|
||||||
|
|
||||||
|
|
||||||
|
# each rule element can be left out or set to 'default' to specify to not
|
||||||
|
# change that attribute of the window
|
||||||
|
|
||||||
|
<decor>yes</decor>
|
||||||
|
# enable or disable window decorations
|
||||||
|
|
||||||
|
<shade>no</shade>
|
||||||
|
# make the window shaded when it appears, or not
|
||||||
|
|
||||||
|
<position force="no">
|
||||||
|
# the position is only used if both an x and y coordinate are provided
|
||||||
|
# (and not set to 'default')
|
||||||
|
# when force is "yes", then the window will be placed here even if it
|
||||||
|
# says you want it placed elsewhere. this is to override buggy
|
||||||
|
# applications who refuse to behave
|
||||||
|
<x>center</x>
|
||||||
|
# a number like 50, or 'center' to center on screen. use a negative number
|
||||||
|
# to start from the right (or bottom for <y>), ie -50 is 50 pixels from
|
||||||
|
# the right edge (or bottom). use 'default' to specify using value
|
||||||
|
# provided by the application, or chosen by openbox, instead.
|
||||||
|
<y>200</y>
|
||||||
|
<monitor>1</monitor>
|
||||||
|
# specifies the monitor in a xinerama setup.
|
||||||
|
# 1 is the first head, or 'mouse' for wherever the mouse is
|
||||||
|
</position>
|
||||||
|
|
||||||
|
<size>
|
||||||
|
# the size to make the window.
|
||||||
|
<width>20</width>
|
||||||
|
# a number like 20, or 'default' to use the size given by the application.
|
||||||
|
# you can use fractions such as 1/2 or percentages such as 75% in which
|
||||||
|
# case the value is relative to the size of the monitor that the window
|
||||||
|
# appears on.
|
||||||
|
<height>30%</height>
|
||||||
|
</size>
|
||||||
|
|
||||||
|
<focus>yes</focus>
|
||||||
|
# if the window should try be given focus when it appears. if this is set
|
||||||
|
# to yes it doesn't guarantee the window will be given focus. some
|
||||||
|
# restrictions may apply, but Openbox will try to
|
||||||
|
|
||||||
|
<desktop>1</desktop>
|
||||||
|
# 1 is the first desktop, 'all' for all desktops
|
||||||
|
|
||||||
|
<layer>normal</layer>
|
||||||
|
# 'above', 'normal', or 'below'
|
||||||
|
|
||||||
|
<iconic>no</iconic>
|
||||||
|
# make the window iconified when it appears, or not
|
||||||
|
|
||||||
|
<skip_pager>no</skip_pager>
|
||||||
|
# asks to not be shown in pagers
|
||||||
|
|
||||||
|
<skip_taskbar>no</skip_taskbar>
|
||||||
|
# asks to not be shown in taskbars. window cycling actions will also
|
||||||
|
# skip past such windows
|
||||||
|
|
||||||
|
<fullscreen>yes</fullscreen>
|
||||||
|
# make the window in fullscreen mode when it appears
|
||||||
|
|
||||||
|
<maximized>true</maximized>
|
||||||
|
# 'Horizontal', 'Vertical' or boolean (yes/no)
|
||||||
|
</application>
|
||||||
|
|
||||||
|
# end of the example
|
||||||
|
-->
|
||||||
|
<applications>
|
||||||
|
<application title="softhddevice">
|
||||||
|
<decor>no</decor>
|
||||||
|
<maximized>true</maximized>
|
||||||
|
<!--<skip_pager>yes</skip_pager>-->
|
||||||
|
<skip_taskbar>no</skip_taskbar>
|
||||||
|
</application>
|
||||||
|
<application title="browser">
|
||||||
|
<decor>no</decor>
|
||||||
|
<maximized>true</maximized>
|
||||||
|
<!--<skip_pager>yes</skip_pager>-->
|
||||||
|
<skip_taskbar>yes</skip_taskbar>
|
||||||
|
</application>
|
||||||
|
<application title="osd2Web">
|
||||||
|
<decor>no</decor>
|
||||||
|
<maximized>true</maximized>
|
||||||
|
<!--<skip_pager>yes</skip_pager>-->
|
||||||
|
<skip_taskbar>yes</skip_taskbar>
|
||||||
|
</application>
|
||||||
|
</applications>
|
||||||
|
</openbox_config>
|
816
roles/yavdr-xorg/templates/openbox_rc.xml.j2
Normal file
816
roles/yavdr-xorg/templates/openbox_rc.xml.j2
Normal file
@ -0,0 +1,816 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||||
|
<!-- Do not edit this file, it will be overwritten on install.
|
||||||
|
Copy the file to $HOME/.config/openbox/ instead. -->
|
||||||
|
<resistance>
|
||||||
|
<strength>10</strength>
|
||||||
|
<screen_edge_strength>20</screen_edge_strength>
|
||||||
|
</resistance>
|
||||||
|
<focus>
|
||||||
|
<focusNew>yes</focusNew>
|
||||||
|
<!-- always try to focus new windows when they appear. other rules do
|
||||||
|
apply -->
|
||||||
|
<followMouse>no</followMouse>
|
||||||
|
<!-- move focus to a window when you move the mouse into it -->
|
||||||
|
<focusLast>yes</focusLast>
|
||||||
|
<!-- focus the last used window when changing desktops, instead of the one
|
||||||
|
under the mouse pointer. when followMouse is enabled -->
|
||||||
|
<underMouse>no</underMouse>
|
||||||
|
<!-- move focus under the mouse, even when the mouse is not moving -->
|
||||||
|
<focusDelay>200</focusDelay>
|
||||||
|
<!-- when followMouse is enabled, the mouse must be inside the window for
|
||||||
|
this many milliseconds (1000 = 1 sec) before moving focus to it -->
|
||||||
|
<raiseOnFocus>no</raiseOnFocus>
|
||||||
|
<!-- when followMouse is enabled, and a window is given focus by moving the
|
||||||
|
mouse into it, also raise the window -->
|
||||||
|
</focus>
|
||||||
|
<placement>
|
||||||
|
<policy>Smart</policy>
|
||||||
|
<!-- 'Smart' or 'UnderMouse' -->
|
||||||
|
<center>yes</center>
|
||||||
|
<!-- whether to place windows in the center of the free area found or
|
||||||
|
the top left corner -->
|
||||||
|
<monitor>Active</monitor>
|
||||||
|
<!-- with Smart placement on a multi-monitor system, try to place new windows
|
||||||
|
on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
|
||||||
|
the active window is, 'Primary' - only on the primary monitor -->
|
||||||
|
<primaryMonitor>Active</primaryMonitor>
|
||||||
|
<!-- The monitor where Openbox should place popup dialogs such as the
|
||||||
|
focus cycling popup, or the desktop switch popup. It can be an index
|
||||||
|
from 1, specifying a particular monitor. Or it can be one of the
|
||||||
|
following: 'Mouse' - where the mouse is, or
|
||||||
|
'Active' - where the active window is -->
|
||||||
|
</placement>
|
||||||
|
<theme>
|
||||||
|
<name>Onyx</name>
|
||||||
|
<titleLayout>NLIMC</titleLayout>
|
||||||
|
<!--
|
||||||
|
available characters are NDSLIMC, each can occur at most once.
|
||||||
|
N: window icon
|
||||||
|
L: window label (AKA title).
|
||||||
|
I: iconify
|
||||||
|
M: maximize
|
||||||
|
C: close
|
||||||
|
S: shade (roll up/down)
|
||||||
|
D: omnipresent (on all desktops).
|
||||||
|
-->
|
||||||
|
<keepBorder>yes</keepBorder>
|
||||||
|
<animateIconify>yes</animateIconify>
|
||||||
|
<font place="ActiveWindow">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>8</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="InactiveWindow">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>8</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="MenuHeader">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>normal</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="MenuItem">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>normal</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="ActiveOnScreenDisplay">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="InactiveOnScreenDisplay">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
</theme>
|
||||||
|
<desktops>
|
||||||
|
<!-- this stuff is only used at startup, pagers allow you to change them
|
||||||
|
during a session
|
||||||
|
|
||||||
|
these are default values to use when other ones are not already set
|
||||||
|
by other applications, or saved in your session
|
||||||
|
|
||||||
|
use obconf if you want to change these without having to log out
|
||||||
|
and back in -->
|
||||||
|
<number>2</number>
|
||||||
|
<firstdesk>1</firstdesk>
|
||||||
|
<names>
|
||||||
|
<!-- set names up here if you want to, like this:
|
||||||
|
<name>desktop 1</name>
|
||||||
|
<name>desktop 2</name>
|
||||||
|
-->
|
||||||
|
</names>
|
||||||
|
<popupTime>875</popupTime>
|
||||||
|
<!-- The number of milliseconds to show the popup for when switching
|
||||||
|
desktops. Set this to 0 to disable the popup. -->
|
||||||
|
</desktops>
|
||||||
|
<resize>
|
||||||
|
<drawContents>yes</drawContents>
|
||||||
|
<popupShow>Nonpixel</popupShow>
|
||||||
|
<!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
|
||||||
|
<popupPosition>Center</popupPosition>
|
||||||
|
<!-- 'Center', 'Top', or 'Fixed' -->
|
||||||
|
<popupFixedPosition>
|
||||||
|
<!-- these are used if popupPosition is set to 'Fixed' -->
|
||||||
|
<x>10</x>
|
||||||
|
<!-- positive number for distance from left edge, negative number for
|
||||||
|
distance from right edge, or 'Center' -->
|
||||||
|
<y>10</y>
|
||||||
|
<!-- positive number for distance from top edge, negative number for
|
||||||
|
distance from bottom edge, or 'Center' -->
|
||||||
|
</popupFixedPosition>
|
||||||
|
</resize>
|
||||||
|
<!-- You can reserve a portion of your screen where windows will not cover when
|
||||||
|
they are maximized, or when they are initially placed.
|
||||||
|
Many programs reserve space automatically, but you can use this in other
|
||||||
|
cases. -->
|
||||||
|
<margins>
|
||||||
|
<top>0</top>
|
||||||
|
<bottom>0</bottom>
|
||||||
|
<left>0</left>
|
||||||
|
<right>0</right>
|
||||||
|
</margins>
|
||||||
|
<dock>
|
||||||
|
<position>TopLeft</position>
|
||||||
|
<!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
|
||||||
|
<floatingX>0</floatingX>
|
||||||
|
<floatingY>0</floatingY>
|
||||||
|
<noStrut>no</noStrut>
|
||||||
|
<stacking>Above</stacking>
|
||||||
|
<!-- 'Above', 'Normal', or 'Below' -->
|
||||||
|
<direction>Vertical</direction>
|
||||||
|
<!-- 'Vertical' or 'Horizontal' -->
|
||||||
|
<autoHide>no</autoHide>
|
||||||
|
<hideDelay>300</hideDelay>
|
||||||
|
<!-- in milliseconds (1000 = 1 second) -->
|
||||||
|
<showDelay>300</showDelay>
|
||||||
|
<!-- in milliseconds (1000 = 1 second) -->
|
||||||
|
<moveButton>Middle</moveButton>
|
||||||
|
<!-- 'Left', 'Middle', 'Right' -->
|
||||||
|
</dock>
|
||||||
|
<keyboard>
|
||||||
|
<chainQuitKey>C-g</chainQuitKey>
|
||||||
|
<!-- Keybindings for desktop switching -->
|
||||||
|
<keybind key="C-A-Left">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>left</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Right">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>right</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Up">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>up</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Down">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>down</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Left">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>left</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Right">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>right</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Up">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>up</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Down">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>down</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-F1">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>1</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-F2">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>2</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-F3">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>3</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-F4">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>4</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-d">
|
||||||
|
<action name="ToggleShowDesktop"/>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for windows -->
|
||||||
|
<keybind key="A-F4">
|
||||||
|
<action name="Close"/>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="A-Escape">
|
||||||
|
<action name="Lower"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="A-space">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Take a screenshot of the current window with scrot when Alt+Print are pressed -->
|
||||||
|
<keybind key="A-Print">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>scrot -s</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for window switching -->
|
||||||
|
<keybind key="A-Tab">
|
||||||
|
<action name="NextWindow">
|
||||||
|
<finalactions>
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</finalactions>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="A-S-Tab">
|
||||||
|
<action name="PreviousWindow">
|
||||||
|
<finalactions>
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</finalactions>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Tab">
|
||||||
|
<action name="NextWindow">
|
||||||
|
<panels>yes</panels>
|
||||||
|
<desktop>yes</desktop>
|
||||||
|
<finalactions>
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</finalactions>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for window switching with the arrow keys -->
|
||||||
|
<keybind key="W-S-Right">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>right</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-S-Left">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>left</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-S-Up">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>up</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-S-Down">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>down</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for running applications -->
|
||||||
|
<keybind key="W-e">
|
||||||
|
<action name="Execute">
|
||||||
|
<startupnotify>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
<name>Konqueror</name>
|
||||||
|
</startupnotify>
|
||||||
|
<command>kfmclient openProfile filemanagement</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Launch scrot when Print is pressed -->
|
||||||
|
<keybind key="Print">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>scrot</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
</keyboard>
|
||||||
|
<mouse>
|
||||||
|
<dragThreshold>1</dragThreshold>
|
||||||
|
<!-- number of pixels the mouse must move before a drag begins -->
|
||||||
|
<doubleClickTime>500</doubleClickTime>
|
||||||
|
<!-- in milliseconds (1000 = 1 second) -->
|
||||||
|
<screenEdgeWarpTime>400</screenEdgeWarpTime>
|
||||||
|
<!-- Time before changing desktops when the pointer touches the edge of the
|
||||||
|
screen while moving a window, in milliseconds (1000 = 1 second).
|
||||||
|
Set this to 0 to disable warping -->
|
||||||
|
<screenEdgeWarpMouse>false</screenEdgeWarpMouse>
|
||||||
|
<!-- Set this to TRUE to move the mouse pointer across the desktop when
|
||||||
|
switching due to hitting the edge of the screen -->
|
||||||
|
<context name="Frame">
|
||||||
|
<mousebind button="A-Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Left" action="Click">
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Left" action="Drag">
|
||||||
|
<action name="Move"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Right" action="Drag">
|
||||||
|
<action name="Resize"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Middle" action="Press">
|
||||||
|
<action name="Lower"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-S-Up" action="Click">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-S-Down" action="Click">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Titlebar">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Move"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="DoubleClick">
|
||||||
|
<action name="ToggleMaximize"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Up" action="Click">
|
||||||
|
<action name="if">
|
||||||
|
<shaded>no</shaded>
|
||||||
|
<then>
|
||||||
|
<action name="Shade"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
<action name="Lower"/>
|
||||||
|
</then>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Down" action="Click">
|
||||||
|
<action name="if">
|
||||||
|
<shaded>yes</shaded>
|
||||||
|
<then>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</then>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="Lower"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Top">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>top</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Left">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>left</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Right">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>right</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Bottom">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>bottom</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="TRCorner BRCorner TLCorner BLCorner">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Client">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Icon">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="AllDesktops">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="ToggleOmnipresent"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Shade">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="ToggleShade"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Iconify">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="Iconify"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Maximize">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="ToggleMaximize"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Click">
|
||||||
|
<action name="ToggleMaximize">
|
||||||
|
<direction>vertical</direction>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Click">
|
||||||
|
<action name="ToggleMaximize">
|
||||||
|
<direction>horizontal</direction>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Close">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="Close"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Desktop">
|
||||||
|
<mousebind button="Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Root">
|
||||||
|
<!-- Menus -->
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-list-combined-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>root-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="MoveResize">
|
||||||
|
<mousebind button="Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
</mouse>
|
||||||
|
<menu>
|
||||||
|
<!-- You can specify more than one menu file in here and they are all loaded,
|
||||||
|
just don't make menu ids clash or, well, it'll be kind of pointless -->
|
||||||
|
<!-- default menu file (or custom one in $HOME/.config/openbox/) -->
|
||||||
|
<!-- system menu files on Debian systems -->
|
||||||
|
<file>/var/lib/openbox/debian-menu.xml</file>
|
||||||
|
<file>menu.xml</file>
|
||||||
|
<hideDelay>200</hideDelay>
|
||||||
|
<!-- if a press-release lasts longer than this setting (in milliseconds), the
|
||||||
|
menu is hidden again -->
|
||||||
|
<middle>no</middle>
|
||||||
|
<!-- center submenus vertically about the parent entry -->
|
||||||
|
<submenuShowDelay>100</submenuShowDelay>
|
||||||
|
<!-- time to delay before showing a submenu after hovering over the parent
|
||||||
|
entry.
|
||||||
|
if this is a negative value, then the delay is infinite and the
|
||||||
|
submenu will not be shown until it is clicked on -->
|
||||||
|
<submenuHideDelay>400</submenuHideDelay>
|
||||||
|
<!-- time to delay before hiding a submenu when selecting another
|
||||||
|
entry in parent menu
|
||||||
|
if this is a negative value, then the delay is infinite and the
|
||||||
|
submenu will not be hidden until a different submenu is opened -->
|
||||||
|
<showIcons>yes</showIcons>
|
||||||
|
<!-- controls if icons appear in the client-list-(combined-)menu -->
|
||||||
|
<manageDesktops>yes</manageDesktops>
|
||||||
|
<!-- show the manage desktops section in the client-list-(combined-)menu -->
|
||||||
|
</menu>
|
||||||
|
<!--
|
||||||
|
# this is an example with comments through out. use these to make your
|
||||||
|
# own rules, but without the comments of course.
|
||||||
|
# you may use one or more of the name/class/role/title/type rules to specify
|
||||||
|
# windows to match
|
||||||
|
|
||||||
|
<application name="the window's _OB_APP_NAME property (see obxprop)"
|
||||||
|
class="the window's _OB_APP_CLASS property (see obxprop)"
|
||||||
|
groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"
|
||||||
|
groupclass="the window's _OB_APP_GROUP_CLASS property (see obxprop)"
|
||||||
|
role="the window's _OB_APP_ROLE property (see obxprop)"
|
||||||
|
title="the window's _OB_APP_TITLE property (see obxprop)"
|
||||||
|
type="the window's _OB_APP_TYPE property (see obxprob)..
|
||||||
|
(if unspecified, then it is 'dialog' for child windows)">
|
||||||
|
# you may set only one of name/class/role/title/type, or you may use more
|
||||||
|
# than one together to restrict your matches.
|
||||||
|
|
||||||
|
# the name, class, role, and title use simple wildcard matching such as those
|
||||||
|
# used by a shell. you can use * to match any characters and ? to match
|
||||||
|
# any single character.
|
||||||
|
|
||||||
|
# the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
|
||||||
|
# or desktop
|
||||||
|
|
||||||
|
# when multiple rules match a window, they will all be applied, in the
|
||||||
|
# order that they appear in this list
|
||||||
|
|
||||||
|
|
||||||
|
# each rule element can be left out or set to 'default' to specify to not
|
||||||
|
# change that attribute of the window
|
||||||
|
|
||||||
|
<decor>yes</decor>
|
||||||
|
# enable or disable window decorations
|
||||||
|
|
||||||
|
<shade>no</shade>
|
||||||
|
# make the window shaded when it appears, or not
|
||||||
|
|
||||||
|
<position force="no">
|
||||||
|
# the position is only used if both an x and y coordinate are provided
|
||||||
|
# (and not set to 'default')
|
||||||
|
# when force is "yes", then the window will be placed here even if it
|
||||||
|
# says you want it placed elsewhere. this is to override buggy
|
||||||
|
# applications who refuse to behave
|
||||||
|
<x>center</x>
|
||||||
|
# a number like 50, or 'center' to center on screen. use a negative number
|
||||||
|
# to start from the right (or bottom for <y>), ie -50 is 50 pixels from
|
||||||
|
# the right edge (or bottom). use 'default' to specify using value
|
||||||
|
# provided by the application, or chosen by openbox, instead.
|
||||||
|
<y>200</y>
|
||||||
|
<monitor>1</monitor>
|
||||||
|
# specifies the monitor in a xinerama setup.
|
||||||
|
# 1 is the first head, or 'mouse' for wherever the mouse is
|
||||||
|
</position>
|
||||||
|
|
||||||
|
<size>
|
||||||
|
# the size to make the window.
|
||||||
|
<width>20</width>
|
||||||
|
# a number like 20, or 'default' to use the size given by the application.
|
||||||
|
# you can use fractions such as 1/2 or percentages such as 75% in which
|
||||||
|
# case the value is relative to the size of the monitor that the window
|
||||||
|
# appears on.
|
||||||
|
<height>30%</height>
|
||||||
|
</size>
|
||||||
|
|
||||||
|
<focus>yes</focus>
|
||||||
|
# if the window should try be given focus when it appears. if this is set
|
||||||
|
# to yes it doesn't guarantee the window will be given focus. some
|
||||||
|
# restrictions may apply, but Openbox will try to
|
||||||
|
|
||||||
|
<desktop>1</desktop>
|
||||||
|
# 1 is the first desktop, 'all' for all desktops
|
||||||
|
|
||||||
|
<layer>normal</layer>
|
||||||
|
# 'above', 'normal', or 'below'
|
||||||
|
|
||||||
|
<iconic>no</iconic>
|
||||||
|
# make the window iconified when it appears, or not
|
||||||
|
|
||||||
|
<skip_pager>no</skip_pager>
|
||||||
|
# asks to not be shown in pagers
|
||||||
|
|
||||||
|
<skip_taskbar>no</skip_taskbar>
|
||||||
|
# asks to not be shown in taskbars. window cycling actions will also
|
||||||
|
# skip past such windows
|
||||||
|
|
||||||
|
<fullscreen>yes</fullscreen>
|
||||||
|
# make the window in fullscreen mode when it appears
|
||||||
|
|
||||||
|
<maximized>true</maximized>
|
||||||
|
# 'Horizontal', 'Vertical' or boolean (yes/no)
|
||||||
|
</application>
|
||||||
|
|
||||||
|
# end of the example
|
||||||
|
-->
|
||||||
|
<applications>
|
||||||
|
<application title="softhddevice">
|
||||||
|
<decor>no</decor>
|
||||||
|
<maximized>true</maximized>
|
||||||
|
<!--<skip_pager>yes</skip_pager>-->
|
||||||
|
<skip_taskbar>yes</skip_taskbar>
|
||||||
|
</application>
|
||||||
|
<application title="browser">
|
||||||
|
<decor>no</decor>
|
||||||
|
<maximized>true</maximized>
|
||||||
|
<!--<skip_pager>yes</skip_pager>-->
|
||||||
|
<skip_taskbar>yes</skip_taskbar>
|
||||||
|
</application>
|
||||||
|
<application title="osd2Web">
|
||||||
|
<decor>no</decor>
|
||||||
|
<maximized>true</maximized>
|
||||||
|
<!--<skip_pager>yes</skip_pager>-->
|
||||||
|
<skip_taskbar>yes</skip_taskbar>
|
||||||
|
</application>
|
||||||
|
</applications>
|
||||||
|
</openbox_config>
|
@ -5,4 +5,4 @@ Before=graphical.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=forking
|
Type=forking
|
||||||
ExecStart=/usr/bin/x-daemon -logverbose 6 -noreset %I
|
ExecStart=/usr/bin/x-daemon -logverbose 6 -noreset %I -config /etc/X11/xorg-debug.conf
|
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Detect second DISPLAY using xrandr
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/bin/bash -c 'export DISPLAY=$DISPLAY.1; xrandr -q | grep "connected" && echo "DISPLAY=$DISPLAY" > ~/.second_display || rm -f ~/.second_display'
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=yavdr-desktop.target
|
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Start openbox on the second DISPLAY if it exists
|
||||||
|
After=detect-second-display.service
|
||||||
|
Wants=detect-second-display.service
|
||||||
|
Before=yavdr-frontend.service
|
||||||
|
ConditionFileNotEmpty=%h/.second_display
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
PassEnvironment=XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
|
||||||
|
EnvironmentFile=%h/.second_display
|
||||||
|
ExecStart=/usr/bin/openbox --config-file %h/.config/openbox/rc.xml
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=yavdr-desktop.target
|
13
roles/yavdr-xorg/templates/systemd/user/osd2web.service.j2
Normal file
13
roles/yavdr-xorg/templates/systemd/user/osd2web.service.j2
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Start a kiosk browser on the second DISPLAY if it exists
|
||||||
|
After=detect-second-display.service openbox-second.service
|
||||||
|
Wants=detect-second-display.service openbox-second.service
|
||||||
|
ConditionFileNotEmpty=%h/.second_display
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=%h/.second_display
|
||||||
|
PassEnvironment=XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
|
||||||
|
ExecStart=/usr/bin/on_vdr -o -c 'kiosk-browser "http://localhost:4444/skins/horchiTft/index.html?theme=blue&onlyView=1"'
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=yavdr-desktop.target
|
12
roles/yavdr-xorg/templates/systemd/user/tmux.service.j2
Normal file
12
roles/yavdr-xorg/templates/systemd/user/tmux.service.j2
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Start tmux in detached session
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=-%h/.session-env
|
||||||
|
Type=forking
|
||||||
|
ExecStart=/usr/bin/tmux new-session -s use-session -d
|
||||||
|
ExecStop=/usr/bin/tmux kill-session -t %u
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
@ -0,0 +1,6 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=yaVDR Desktop
|
||||||
|
Requires=default.target
|
||||||
|
After=default.target pulseaudio.service
|
||||||
|
Wants=dbus.service pulseaudio.service
|
||||||
|
AllowIsolate=yes
|
2
roles/yavdr-xorg/templates/systemd/vdr-environ.j2
Normal file
2
roles/yavdr-xorg/templates/systemd/vdr-environ.j2
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[Service]
|
||||||
|
EnvironmentFile=-/var/lib/vdr/.session-env
|
@ -4,4 +4,4 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
After=x@vt7.service
|
After=x@vt7.service
|
||||||
Wants=x@vt7.service
|
Wants=x@vt7.service
|
||||||
BindsTo=x@vt7.service
|
#BindsTo=x@vt7.service
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=X with verbose logging on %I
|
|
||||||
Wants=graphical.target
|
|
||||||
Before=graphical.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=forking
|
|
||||||
ExecStart=/usr/bin/x-daemon -logverbose 6 -noreset %I
|
|
20
roles/yavdr-xorg/templates/xorg-verbose.conf.j2
Normal file
20
roles/yavdr-xorg/templates/xorg-verbose.conf.j2
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
Section "Device"
|
||||||
|
Identifier "nvidia"
|
||||||
|
Driver "nvidia"
|
||||||
|
Option "NoLogo" "true"
|
||||||
|
Option "DynamicTwinView" "true"
|
||||||
|
Option "NoFlip" "false"
|
||||||
|
# Option "FlatPanelProperties" "Scaling = Native"
|
||||||
|
# Option "ModeValidation" "NoVesaModes, NoXServerModes"
|
||||||
|
# Option "ModeDebug" "true"
|
||||||
|
# Option "HWCursor" "false"
|
||||||
|
EndSection
|
||||||
|
|
||||||
|
Section "Screen"
|
||||||
|
Identifier "screen"
|
||||||
|
Device "nvidia"
|
||||||
|
EndSection
|
||||||
|
|
||||||
|
Section "Extensions"
|
||||||
|
Option "Composite" "false"
|
||||||
|
EndSection
|
97
roles/yavdr-xorg/templates/xorg.conf.j2
Normal file
97
roles/yavdr-xorg/templates/xorg.conf.j2
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{{ ansible_managed_file | comment }}
|
||||||
|
|
||||||
|
Section "ServerLayout"
|
||||||
|
Identifier "Layout0"
|
||||||
|
Screen 0 "Screen0"
|
||||||
|
{% if xorg.secondary is defined %}
|
||||||
|
Screen 1 "Screen1" RightOf "Screen0"
|
||||||
|
{% endif %}
|
||||||
|
#InputDevice "Keyboard0" "CoreKeyboard"
|
||||||
|
#InputDevice "Mouse0" "CorePointer"
|
||||||
|
EndSection
|
||||||
|
|
||||||
|
Section "InputClass"
|
||||||
|
Identifier "exclude eventlircd devices"
|
||||||
|
MatchTag "eventlircd"
|
||||||
|
Option "Ignore" "True"
|
||||||
|
EndSection
|
||||||
|
|
||||||
|
Section "Monitor"
|
||||||
|
Identifier "Monitor0"
|
||||||
|
VendorName "{{ xorg.primary.vendor }}"
|
||||||
|
ModelName "{{ xorg.primary.model }}"
|
||||||
|
Option "DPMS"
|
||||||
|
Option "ExactModeTimingsDVI" "True"
|
||||||
|
EndSection
|
||||||
|
|
||||||
|
Section "Device"
|
||||||
|
Identifier "Device0"
|
||||||
|
Driver "nvidia"
|
||||||
|
VendorName "NVIDIA Corporation"
|
||||||
|
Option "NoLogo" "true"
|
||||||
|
{% if xorg.primary.bus_id is defined %}
|
||||||
|
BoardName "{{ xorg.primary.gpu_name }}"
|
||||||
|
BusID "{{ xorg.primary.bus_id }}"
|
||||||
|
{% else %}
|
||||||
|
BoardName "Unknown"
|
||||||
|
{% endif %}
|
||||||
|
Screen 0
|
||||||
|
EndSection
|
||||||
|
|
||||||
|
Section "Screen"
|
||||||
|
Identifier "Screen0"
|
||||||
|
Device "Device0"
|
||||||
|
Monitor "Monitor0"
|
||||||
|
DefaultDepth 24
|
||||||
|
Option "nvidiaXineramaInfoOrder" "{{ xorg.primary.connector }}"
|
||||||
|
Option "ConnectedMonitor" "{{ xorg.primary.connector }}"
|
||||||
|
Option "UseDisplayDevice" "{{ xorg.primary.connector }}"
|
||||||
|
Option "CustomEDID" "{{ xorg.primary.connector }}:/etc/X11/edid.{{ xorg.primary.connector }}.bin"
|
||||||
|
Option "metamodes" "{{ xorg.primary.connector }}: {{ xorg.primary.mode }} +0+0"
|
||||||
|
Option "SLI" "Off"
|
||||||
|
Option "MultiGPU" "Off"
|
||||||
|
Option "BaseMosaic" "off"
|
||||||
|
SubSection "Display"
|
||||||
|
Depth 24
|
||||||
|
EndSubSection
|
||||||
|
EndSection
|
||||||
|
|
||||||
|
{% if xorg.secondary is defined %}
|
||||||
|
Section "Device"
|
||||||
|
Identifier "Device1"
|
||||||
|
Driver "nvidia"
|
||||||
|
VendorName "NVIDIA Corporation"
|
||||||
|
Option "NoLogo" "true"
|
||||||
|
{% if xorg.secondary.bus_id is defined %}
|
||||||
|
BoardName "{{ xorg.primary.gpu_name }}"
|
||||||
|
BusID "{{ xorg.primary.bus_id }}"
|
||||||
|
{% else %}
|
||||||
|
BoardName "Unknown"
|
||||||
|
{% endif %}
|
||||||
|
Screen 1
|
||||||
|
EndSection
|
||||||
|
|
||||||
|
Section "Monitor"
|
||||||
|
Identifier "Monitor1"
|
||||||
|
VendorName "{{ xorg.secondary.vendor }}"
|
||||||
|
ModelName "{{ xorg.secondary.model }}"
|
||||||
|
EndSection
|
||||||
|
|
||||||
|
Section "Screen"
|
||||||
|
Identifier "Screen1"
|
||||||
|
Device "Device1"
|
||||||
|
Monitor "Monitor1"
|
||||||
|
DefaultDepth 24
|
||||||
|
Option "nvidiaXineramaInfoOrder" "{{ xorg.secondary.connector }}"
|
||||||
|
Option "ConnectedMonitor" "{{ xorg.secondary.connector }}"
|
||||||
|
Option "UseDisplayDevice" "{{ xorg.secondary.connector }}"
|
||||||
|
Option "CustomEDID" "{{ xorg.secondary.connector }}:/etc/X11/edid.{{ xorg.secondary.connector }}.bin"
|
||||||
|
Option "metamodes" "{{ xorg.secondary.connector }}: {{ xorg.secondary.mode }} +0+0"
|
||||||
|
Option "SLI" "Off"
|
||||||
|
Option "MultiGPU" "Off"
|
||||||
|
Option "BaseMosaic" "off"
|
||||||
|
SubSection "Display"
|
||||||
|
Depth 24
|
||||||
|
EndSubSection
|
||||||
|
EndSection
|
||||||
|
{% endif %}
|
34
yavdr07.yml
34
yavdr07.yml
@ -6,20 +6,26 @@
|
|||||||
hosts: all
|
hosts: all
|
||||||
become: true
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- yavdr-common # install and configure the basic system
|
- yavdr-common # install and configure the basic system
|
||||||
- vdr # install vdr and related packages
|
- autoinstall-ubuntu-drivers # use ubuntu-drivers to install proprietary dirvers
|
||||||
- yavdr-network # enable network client capabilities
|
# (e.g. nvidia, virtualbox)
|
||||||
- samba-install # install samba server
|
- vdr # install vdr and related packages
|
||||||
- samba-config # configure samba server
|
- yavdr-network # enable network client capabilities
|
||||||
- nfs-server # install nfs server
|
- samba-install # install samba server
|
||||||
- yavdr-xorg # graphical session
|
- samba-config # configure samba server
|
||||||
- yavdr-remote # remote configuration files, services and scripts
|
- nfs-server # install nfs server
|
||||||
- autoinstall-satip # install vdr-plugin-satip if a Sat>IP server has been found
|
- pulseaudio # install pulseaudio
|
||||||
- autoinstall-targavfd # install vdr-plugin-targavfd if display is connected
|
- yavdr-xorg # graphical session
|
||||||
- autoinstall-imonlcd # install vdr-plugin-imonlcd if a matchind display is connected
|
- yavdr-remote # remote configuration files, services and scripts
|
||||||
#- autoinstall-pv350 # install vdr-plugin-pvr350 if a matching card is detected
|
- autoinstall-satip # install vdr-plugin-satip if a Sat>IP server has been found
|
||||||
#- autoinstall-dvbsddevice # install vdr-plugin-dvbsddevice if a matching card is detected
|
- autoinstall-targavfd # install vdr-plugin-targavfd if display is connected
|
||||||
- grub-config # configure grub
|
- autoinstall-imonlcd # install vdr-plugin-imonlcd if a matchind display is connected
|
||||||
|
- autoinstall-pvr350 # install vdr-plugin-pvr350 if a matching card is detected
|
||||||
|
- autoinstall-dvbsddevice # install vdr-plugin-dvbsddevice if a matching card is detected
|
||||||
|
- kodi
|
||||||
|
- dvd # set up packages and a udev rule to allow kodi and other players
|
||||||
|
# to play and eject optical media
|
||||||
|
- grub-config # configure grub
|
||||||
|
|
||||||
handlers:
|
handlers:
|
||||||
- include: handlers/main.yml
|
- include: handlers/main.yml
|
||||||
|
Loading…
Reference in New Issue
Block a user