feat: Add Gamescope and Sunshine configuration files and update session management
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user