add xorg configuration and driver autodetection
This commit is contained in:
parent
d513db21ca
commit
5e5f9f346a
1258
Manual.org
1258
Manual.org
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
# 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
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
- name: Restart Samba
|
- name: Restart Samba
|
||||||
systemd:
|
systemd:
|
||||||
name: smbd.service
|
name: smbd.service
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if (( $EUID != 0 )); then
|
if (( $EUID != 0 )); then
|
||||||
echo "This script must be run using sudo or as root"
|
echo "This script must be run using sudo or as root"
|
||||||
exit
|
exit
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
#!/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.
|
||||||
@ -65,7 +66,7 @@ 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')
|
||||||
|
|
||||||
def get_pci_devices():
|
def get_pci_devices():
|
||||||
for device in glob.glob('/sys/devices/pci*/*:*:*/'):
|
for device in glob.glob('/sys/devices/pci*/*:*:*/'):
|
||||||
@ -75,7 +76,7 @@ def get_pci_devices():
|
|||||||
vendor_id = int(d.read().strip(), 16)
|
vendor_id = int(d.read().strip(), 16)
|
||||||
with open(os.path.join(device, 'class')) as d:
|
with open(os.path.join(device, 'class')) as d:
|
||||||
class_id = int(d.read().strip(), 16)
|
class_id = int(d.read().strip(), 16)
|
||||||
yield PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id)
|
yield PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id, pciPath=device)
|
||||||
|
|
||||||
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]
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
#!/usr/bin/env python2
|
#!/usr/bin/env python2
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
DOCUMENTATION = '''
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
#!/usr/bin/env python2
|
#!/usr/bin/env python2
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import ast
|
import ast
|
||||||
@ -42,6 +43,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"
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
|
|
||||||
[localhost]
|
[localhost]
|
||||||
localhost connection=local
|
localhost connection=local
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file roles/autoinstall-dvbhddevice/tasks/main.yml
|
# file roles/autoinstall-dvbhddevice/tasks/main.yml
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file roles/autoinstall-dvbsddevice/tasks/main.yml
|
# file roles/autoinstall-dvbsddevice/tasks/main.yml
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file roles/autoinstall-imonlcd/tasks/main.yml
|
# file roles/autoinstall-imonlcd/tasks/main.yml
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file roles/autoinstall-libcec-daemon/tasks/main.yml
|
# file roles/autoinstall-libcec-daemon/tasks/main.yml
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file roles/autoinstall-pvr350/tasks/main.yml
|
# file roles/autoinstall-pvr350/tasks/main.yml
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file roles/autoinstall-satip/tasks/main.yml
|
# file roles/autoinstall-satip/tasks/main.yml
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file roles/autoinstall-targavfd/tasks/main.yml
|
# file roles/autoinstall-targavfd/tasks/main.yml
|
||||||
|
|
||||||
|
17
roles/autoinstall-ubuntu-drivers/tasks/main.yml
Normal file
17
roles/autoinstall-ubuntu-drivers/tasks/main.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
---
|
||||||
|
# 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
|
16
roles/dvd/tasks/main.yml
Normal file
16
roles/dvd/tasks/main.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
---
|
||||||
|
# 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
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
system:
|
system:
|
||||||
shutdown: poweroff
|
shutdown: poweroff
|
||||||
grub:
|
grub:
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
- 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,4 @@
|
|||||||
|
|
||||||
- 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
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
exec tail -n +3 $0
|
exec tail -n +3 $0
|
||||||
|
|
||||||
|
25
roles/kodi/tasks/main.yml
Normal file
25
roles/kodi/tasks/main.yml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
- 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
|
||||||
|
|
||||||
|
- 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 }}'
|
13
roles/kodi/templates/kodi.service.j2
Normal file
13
roles/kodi/templates/kodi.service.j2
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
[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
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
- name: install nfs server packages
|
- name: install nfs server packages
|
||||||
apt:
|
apt:
|
||||||
name: '{{ item }}'
|
name: '{{ item }}'
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
/srv *(rw,fsid=0,sync,no_subtree_check,all_squash,anongid={{ vdr.gid }},anonuid={{ vdr.uid }})
|
/srv *(rw,fsid=0,sync,no_subtree_check,all_squash,anongid={{ vdr.gid }},anonuid={{ vdr.uid }})
|
||||||
{% for name, path in media_dirs.iteritems() %}
|
{% for name, path in media_dirs.iteritems() %}
|
||||||
{{ path }} *(rw,fsid={{ loop.index }},sync,no_subtree_check,all_squash,anongid={{ vdr.gid }},anonuid={{ vdr.uid }}{{ ',insecure' if nfs.insecure else '' }})
|
{{ path }} *(rw,fsid={{ loop.index }},sync,no_subtree_check,all_squash,anongid={{ vdr.gid }},anonuid={{ vdr.uid }}{{ ',insecure' if nfs.insecure else '' }})
|
||||||
|
@ -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:
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{{ ansible_managed_file | comment }}
|
{{ ansible_managed_file | comment }}
|
||||||
|
|
||||||
#======================= Global Settings =======================
|
#======================= Global Settings =======================
|
||||||
|
@ -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,3 +1,4 @@
|
|||||||
|
|
||||||
foo:
|
foo:
|
||||||
- bar
|
- bar
|
||||||
- baz
|
- baz
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
- name: show vars
|
- name: show vars
|
||||||
debug:
|
debug:
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file: roles/vdr/tasks/main.yml
|
# file: roles/vdr/tasks/main.yml
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file: roles/yavdr-common/defaults/main.yml
|
# file: roles/yavdr-common/defaults/main.yml
|
||||||
|
|
||||||
@ -13,7 +14,7 @@ drivers:
|
|||||||
sundtek: auto
|
sundtek: auto
|
||||||
ddvb-dkms: auto
|
ddvb-dkms: auto
|
||||||
|
|
||||||
extra_packages:
|
extra_packages:
|
||||||
- vim
|
- vim
|
||||||
- tree
|
- tree
|
||||||
- w-scan
|
- w-scan
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
---
|
|
||||||
|
|
||||||
# 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:
|
||||||
@ -59,6 +55,7 @@
|
|||||||
- at
|
- at
|
||||||
- bash-completion
|
- bash-completion
|
||||||
- biosdevname
|
- biosdevname
|
||||||
|
- debconf-utils
|
||||||
- linux-firmware
|
- linux-firmware
|
||||||
- psmisc
|
- psmisc
|
||||||
- python-kmodpy
|
- python-kmodpy
|
||||||
@ -66,7 +63,6 @@
|
|||||||
- python3-usb
|
- python3-usb
|
||||||
- software-properties-common
|
- software-properties-common
|
||||||
- ssh
|
- ssh
|
||||||
- ubuntu-drivers-common
|
|
||||||
- wget
|
- wget
|
||||||
- wpasupplicant
|
- wpasupplicant
|
||||||
- usbutils
|
- usbutils
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{{ ansible_managed_file | comment('c') }}
|
{{ ansible_managed_file | comment('c') }}
|
||||||
// Recommends are as of now still abused in many packages
|
// Recommends are as of now still abused in many packages
|
||||||
APT::Install-Recommends "0";
|
APT::Install-Recommends "0";
|
||||||
|
@ -1 +1,2 @@
|
|||||||
|
|
||||||
install_avahi: true
|
install_avahi: true
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# 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
|
||||||
|
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,27 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# 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: Stop xlogin
|
||||||
|
systemd:
|
||||||
|
name: xlogin@vdr.service
|
||||||
|
state: stopped
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Stop x
|
||||||
|
systemd:
|
||||||
|
name: x@vt7.service
|
||||||
|
state: stopped
|
||||||
|
|
||||||
- name: install packages for xorg
|
- name: install packages for xorg
|
||||||
apt:
|
apt:
|
||||||
name: '{{ item }}'
|
name: '{{ item }}'
|
||||||
@ -57,7 +78,7 @@
|
|||||||
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? ###
|
### TODO: move to yavdr-xorg package? ###
|
||||||
- name: create folder for customizations of vdr.service
|
- name: create folder for customizations of vdr.service
|
||||||
@ -66,6 +87,22 @@
|
|||||||
dest: /etc/systemd/system/vdr.service.d
|
dest: /etc/systemd/system/vdr.service.d
|
||||||
mode: '0775'
|
mode: '0775'
|
||||||
|
|
||||||
|
- name: create folder for systemd user configuration
|
||||||
|
file:
|
||||||
|
state: directory
|
||||||
|
dest: '{{ vdr.home }}/.config/systemd/user'
|
||||||
|
mode: '0775'
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
|
||||||
|
- name: create folder for openbox configuration
|
||||||
|
file:
|
||||||
|
state: directory
|
||||||
|
dest: '{{ vdr.home }}/.config/openbox'
|
||||||
|
mode: '0775'
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
group: '{{ vdr.group }}'
|
||||||
|
|
||||||
- name: add dependency to X-server for vdr.service using a drop-in
|
- name: add dependency to X-server for vdr.service using a drop-in
|
||||||
template:
|
template:
|
||||||
src: templates/vdr-xorg.conf
|
src: templates/vdr-xorg.conf
|
||||||
@ -75,7 +112,7 @@
|
|||||||
- name: create .xinitrc for vdr user
|
- name: create .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 }}'
|
||||||
@ -83,7 +120,23 @@
|
|||||||
- name: populate autostart for openbox
|
- name: populate autostart for openbox
|
||||||
template:
|
template:
|
||||||
src: 'templates/autostart.j2'
|
src: 'templates/autostart.j2'
|
||||||
dest: '/var/lib/vdr/.config/openbox/autostart'
|
dest: '{{ vdr.home }}/.config/openbox/autostart'
|
||||||
|
mode: 0755
|
||||||
|
owner: '{{ vdr.user }}'
|
||||||
|
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.target for the user session
|
||||||
|
template:
|
||||||
|
src: 'templates/yavdr-desktop.target.j2'
|
||||||
|
dest: '{{ vdr.home }}/.config/systemd/user/yavdr-desktop.target'
|
||||||
mode: 0755
|
mode: 0755
|
||||||
owner: '{{ vdr.user }}'
|
owner: '{{ vdr.user }}'
|
||||||
group: '{{ vdr.group }}'
|
group: '{{ vdr.group }}'
|
||||||
@ -97,6 +150,11 @@
|
|||||||
groups: '{{ vdr.group }}'
|
groups: '{{ vdr.group }}'
|
||||||
append: yes
|
append: yes
|
||||||
|
|
||||||
|
# TODO: run xorg-debug and parse xrandr output
|
||||||
|
# TODO: expand template for xorg.conf (or snippets)
|
||||||
|
# with respect for the available graphics card driver
|
||||||
|
# nvidia, noveau, intel, radeon
|
||||||
|
|
||||||
- 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,3 +1,4 @@
|
|||||||
|
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# {{ ansible_managed_file }}
|
# {{ ansible_managed_file }}
|
||||||
exec openbox-session
|
exec openbox-session
|
||||||
|
@ -1,2 +1,10 @@
|
|||||||
|
|
||||||
env | grep "DISPLAY\|DBUS_SESSION_BUS_ADDRESS\|XDG_RUNTIME_DIR" > ~/.session-env
|
env | grep "DISPLAY\|DBUS_SESSION_BUS_ADDRESS\|XDG_RUNTIME_DIR" > ~/.session-env
|
||||||
systemctl --user import-environment
|
systemctl --user import-environment DISPLAY XAUTHORITY XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
|
||||||
|
|
||||||
|
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>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>
|
@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
# file: roles/yavdr-xorg/templates/vdr-xorg.conf
|
# file: roles/yavdr-xorg/templates/vdr-xorg.conf
|
||||||
# {{ ansible_managed_file }}
|
# {{ ansible_managed_file }}
|
||||||
|
|
||||||
[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,3 +1,4 @@
|
|||||||
|
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=X with verbose logging on %I
|
Description=X with verbose logging on %I
|
||||||
Wants=graphical.target
|
Wants=graphical.target
|
||||||
|
7
roles/yavdr-xorg/templates/yavdr-desktop.target.j2
Normal file
7
roles/yavdr-xorg/templates/yavdr-desktop.target.j2
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=yaVDR Desktop
|
||||||
|
Requires=default.target
|
||||||
|
After=default.target pulseaudio.service
|
||||||
|
Wants=dbus.service pulseaudio.service
|
||||||
|
AllowIsolate=yes
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file: yavdr07-headless.yml
|
# file: yavdr07-headless.yml
|
||||||
# this playbook set up a headless yaVDR 0.7 installation
|
# this playbook set up a headless yaVDR 0.7 installation
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
# file: yavdr07.yml
|
# file: yavdr07.yml
|
||||||
# this playbook sets up a complete yaVDR 0.7 installation
|
# this playbook sets up a complete yaVDR 0.7 installation
|
||||||
@ -7,6 +8,7 @@
|
|||||||
become: true
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- yavdr-common # install and configure the basic system
|
- yavdr-common # install and configure the basic system
|
||||||
|
- autoinstall-ubuntu-drivers # use ubuntu-drivers to install proprietary dirvers (e.g. nvidia, virtualbox)
|
||||||
- vdr # install vdr and related packages
|
- vdr # install vdr and related packages
|
||||||
- yavdr-network # enable network client capabilities
|
- yavdr-network # enable network client capabilities
|
||||||
- samba-install # install samba server
|
- samba-install # install samba server
|
||||||
@ -19,6 +21,8 @@
|
|||||||
- autoinstall-imonlcd # install vdr-plugin-imonlcd if a matchind display is connected
|
- autoinstall-imonlcd # install vdr-plugin-imonlcd if a matchind display is connected
|
||||||
#- autoinstall-pv350 # install vdr-plugin-pvr350 if a matching card is detected
|
#- autoinstall-pv350 # install vdr-plugin-pvr350 if a matching card is detected
|
||||||
#- autoinstall-dvbsddevice # install vdr-plugin-dvbsddevice if a matching card is detected
|
#- autoinstall-dvbsddevice # install vdr-plugin-dvbsddevice if a matching card is detected
|
||||||
|
- kodi
|
||||||
|
- dvd
|
||||||
- grub-config # configure grub
|
- grub-config # configure grub
|
||||||
|
|
||||||
handlers:
|
handlers:
|
||||||
|
Loading…
Reference in New Issue
Block a user