feat: Add Gamescope and Sunshine configuration files and update session management

This commit is contained in:
2025-10-28 19:24:43 +01:00
parent 9fa68f3bc5
commit 7a7f2711fe
10 changed files with 139 additions and 71 deletions
+66 -25
View File
@@ -12,6 +12,22 @@
system_cores: "0,8"
general_cores: "2-7,10-15"
sunshine_cores: "1,9"
screen_resolution: "{{ lookup('env', 'GAME_RESOLUTION') | d('1280x720', true) }}"
screen_width: "{{ screen_resolution.split('x')[0] }}"
screen_height: "{{ screen_resolution.split('x')[1] }}"
hdr_enabled: "{{ lookup('env', 'HDR_ENABLED') | d('false', true) }}"
output_connector: "{{ lookup('env', 'OUTPUT_CONNECTOR') | d('HDMI-A-1', true) }}"
framerate: "{{ lookup('env', 'FRAMERATE') | d('60', true) }}"
drm_device: "{{ lookup('env', 'DRM_DEVICE') | d('/dev/dri/card1', true) }}"
grub_options:
- quiet
- splash
- amd_pstate=active
- nvidia_drm.modeset=1
- mitigations=off
- threadirqs
- nohz_full=1-7,9-15
- rcu_nocbs=1-7,9-15
tasks:
# --- Base dependencies ---
@@ -42,6 +58,8 @@
- weston
- bubblewrap
- waypipe
- drm-utils
- ethtool
state: present
- name: Ensure user namespaces are enabled
@@ -68,13 +86,19 @@
enabled: true
state: started
- name: Enable wake-on-lan on primary network interface
become: true
ansible.builtin.command: ethtool -s $(ip route show default | awk '/default/ {print $5}') wol g
changed_when: false
failed_when: false
# --- Performance kernel options ---
- name: Tune kernel command line for isolation
become: true
ansible.builtin.lineinfile:
path: "{{ grub_cfg }}"
regexp: "^GRUB_CMDLINE_LINUX_DEFAULT="
line: 'GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_pstate=active mitigations=off threadirqs nohz_full=1-7,9-15 rcu_nocbs=1-7,9-15"'
line: 'GRUB_CMDLINE_LINUX_DEFAULT="{{ grub_options | join(" ") }}"'
notify: Update grub
- name: Ensure cpupower governor is performance
@@ -108,7 +132,11 @@
owner: root
group: root
loop: "{{ query('fileglob', 'game_station/systemd/system/*') }}"
notify: Reload systemd daemon for system services
- name: Reload systemd daemon for system services
become: true
ansible.builtin.systemd:
daemon_reload: true
- name: Install System scripts
become: true
@@ -130,6 +158,26 @@
mode: "0755"
loop:
- /root/.local/logs
- "{{ systemd_system_dir }}/getty@tty1.service.d"
- name: Create override for getty on tty1
become: true
ansible.builtin.copy:
dest: "{{ systemd_system_dir }}/getty@tty1.service.d/override.conf"
owner: root
group: root
mode: "0644"
content: |
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin {{ user_name }} --noclear %I $TERM
Type=idle
- name: Enable user lingering for game user
become: true
ansible.builtin.command: loginctl enable-linger {{ user_name }}
changed_when: false
failed_when: false
- name: Create log file for Jupiter BIOS update (dummy file)
become: true
@@ -204,7 +252,13 @@
group: "{{ user_name }}"
mode: "0644"
loop: "{{ query('fileglob', 'game_station/systemd/user/*') }}"
notify: Reload systemd daemon for user services
- name: Reload systemd daemon for user services
become: true
become_user: "{{ user_name }}"
ansible.builtin.systemd:
daemon_reload: true
scope: user
- name: Download steamtools
become: true
@@ -256,16 +310,13 @@
- name: Write Gamescope configuration
become: true
ansible.builtin.copy:
dest: "{{ user_config_dir }}/gamescope/gamescope.conf"
ansible.builtin.template:
src: "{{ item }}"
dest: "{{ user_config_dir }}/gamescope/{{ item | basename }}"
owner: "{{ user_name }}"
group: "{{ user_name }}"
mode: "0644"
content: |
OUTPUT_CONNECTOR=HDMI-A-1
FRAMERATE=120
RESOLUTION={{ lookup('env', 'GAME_RESOLUTION') | default('1920x1080') }}
HDR_ENABLED={{ lookup('env', 'HDR_ENABLED') | default('false') }}
DRM_DEVICE=/dev/dri/card1
loop: "{{ query('fileglob', 'game_station/gamescope/*') }}"
- name: Install Sunshine files
become: true
@@ -277,27 +328,17 @@
mode: "0644"
loop: "{{ query('fileglob', 'game_station/sunshine/*') }}"
- name: Enable Gamescope session service on boot
- name: Enable User session service login
become: true
become_user: "{{ user_name }}"
ansible.builtin.systemd:
name: gamescope-session.service
name: session.service
enabled: true
state: started
scope: user
handlers:
- name: Update grub
ansible.builtin.command: grub2-mkconfig -o /boot/grub2/grub.cfg
become: true
changed_when: false
- name: Reload systemd daemon for system services
become: true
ansible.builtin.systemd:
daemon_reload: true
- name: Reload systemd daemon for user services
become: true
become_user: "{{ user_name }}"
ansible.builtin.systemd:
daemon_reload: true
scope: user