|
1 | 1 | # Copyright 2021-2024 VMware, Inc.
|
2 | 2 | # SPDX-License-Identifier: BSD-2-Clause
|
3 | 3 | ---
|
4 |
| -# Check whether guest OS has desktop environment and |
5 |
| -# get display manager if deskotp environment is installed |
6 |
| -- name: "Initialize facts of guest OS having desktop environment and display manager" |
| 4 | +# Check whether guest OS has desktop environment |
| 5 | +# If desktop environment is running, get display manager and session type |
| 6 | +- name: "Initialize facts about guest OS desktop environment" |
7 | 7 | ansible.builtin.set_fact:
|
8 | 8 | guest_os_with_gui: false
|
9 | 9 | guest_os_display_manager: ""
|
| 10 | + guest_os_session_type: "tty" |
| 11 | + guest_os_session_desktop: "" |
10 | 12 |
|
11 | 13 | - name: "Check Linux guest OS has desktop environment or not"
|
12 | 14 | when: guest_os_ansible_system == "linux"
|
13 | 15 | block:
|
14 |
| - - name: "Get guest OS display manager service detail" |
15 |
| - ansible.builtin.shell: "systemctl status display-manager.service" |
16 |
| - register: display_manager_status |
17 |
| - changed_when: false |
18 |
| - ignore_errors: true |
| 16 | + - name: "List all login sessions in guest OS" |
| 17 | + ansible.builtin.shell: "loginctl --no-legend list-sessions | awk '{print $1}'" |
19 | 18 | delegate_to: "{{ vm_guest_ip }}"
|
| 19 | + register: list_login_sessions |
| 20 | + ignore_errors: true |
20 | 21 |
|
21 |
| - - name: "Set facts of guest OS desktop environment for {{ guest_os_ansible_distribution }}" |
22 |
| - ansible.builtin.set_fact: |
23 |
| - guest_os_with_gui: true |
24 |
| - guest_os_display_manager: |- |
25 |
| - {%- if "GNOME Display Manager" in display_manager_status.stdout_lines[0] -%}gdm |
26 |
| - {%- elif "Light Display Manager" in display_manager_status.stdout_lines[0] -%}lightdm |
27 |
| - {%- elif "X Display Manager" in display_manager_status.stdout_lines[0] -%}xdm |
28 |
| - {%- elif "LXDE Display Manager" in display_manager_status.stdout_lines[0] -%}lxdm |
29 |
| - {%- elif "Simple Desktop Display Manager" in display_manager_status.stdout_lines[0] -%}sddm |
30 |
| - {%- elif guest_os_ansible_distribution == 'Astra Linux (Orel)' -%}fly-dm |
31 |
| - {%- endif -%} |
| 22 | + - name: "Get desktop session from login sessions" |
32 | 23 | when:
|
33 |
| - - display_manager_status.rc is defined |
34 |
| - - display_manager_status.rc == 0 |
35 |
| - - display_manager_status.stdout_lines is defined |
36 |
| - - display_manager_status.stdout_lines | length > 0 |
| 24 | + - list_login_sessions.rc is defined |
| 25 | + - list_login_sessions.rc == 0 |
| 26 | + - list_login_sessions.stdout_lines is defined |
| 27 | + - list_login_sessions.stdout_lines | length > 0 |
| 28 | + block: |
| 29 | + - name: "Get types of all login sessions" |
| 30 | + ansible.builtin.shell: "loginctl -p Type -p Desktop show-session {{ session_id }}" |
| 31 | + delegate_to: "{{ vm_guest_ip }}" |
| 32 | + register: get_session_types |
| 33 | + ignore_errors: true |
| 34 | + with_items: "{{ list_login_sessions.stdout_lines }}" |
| 35 | + loop_control: |
| 36 | + loop_var: session_id |
| 37 | + |
| 38 | + - name: "Set fact of all login session types" |
| 39 | + ansible.builtin.set_fact: |
| 40 | + guest_login_sessions: >- |
| 41 | + {{ |
| 42 | + get_session_types.results | |
| 43 | + selectattr('stdout', 'defined') | |
| 44 | + map(attribute='stdout') | |
| 45 | + map('replace', '=', ': ') | |
| 46 | + map('from_yaml') | |
| 47 | + select('search', 'x11|wayland', ignorecase=true) |
| 48 | + }} |
| 49 | +
|
| 50 | + - name: "Get display manager, session type and desktop in guest OS" |
| 51 | + when: guest_login_sessions | length > 0 |
| 52 | + block: |
| 53 | + - name: "Set facts of desktop environment and session type in guest OS" |
| 54 | + ansible.builtin.set_fact: |
| 55 | + guest_os_with_gui: true |
| 56 | + guest_os_session_type: "{{ guest_login_sessions[0].Type }}" |
| 57 | + guest_os_session_desktop: "{{ guest_login_sessions[0].Desktop }}" |
| 58 | + |
| 59 | + - name: "Get guest OS display manager service detail" |
| 60 | + ansible.builtin.shell: "systemctl status display-manager.service" |
| 61 | + register: display_manager_status |
| 62 | + changed_when: false |
| 63 | + ignore_errors: true |
| 64 | + delegate_to: "{{ vm_guest_ip }}" |
| 65 | + |
| 66 | + - name: "Set fact of display manager in guest OS" |
| 67 | + ansible.builtin.set_fact: |
| 68 | + guest_os_display_manager: |- |
| 69 | + {%- if "GNOME Display Manager" in display_manager_status.stdout_lines[0] -%}gdm |
| 70 | + {%- elif "Light Display Manager" in display_manager_status.stdout_lines[0] -%}lightdm |
| 71 | + {%- elif "X Display Manager" in display_manager_status.stdout_lines[0] -%}xdm |
| 72 | + {%- elif "LXDE Display Manager" in display_manager_status.stdout_lines[0] -%}lxdm |
| 73 | + {%- elif "Simple Desktop Display Manager" in display_manager_status.stdout_lines[0] -%}sddm |
| 74 | + {%- elif guest_os_ansible_distribution == 'Astra Linux (Orel)' -%}fly-dm |
| 75 | + {%- endif -%} |
| 76 | + when: |
| 77 | + - display_manager_status.rc is defined |
| 78 | + - display_manager_status.rc == 0 |
| 79 | + - display_manager_status.stdout_lines is defined |
| 80 | + - display_manager_status.stdout_lines | length > 0 |
37 | 81 |
|
38 | 82 | - name: "Check FreeBSD has desktop environment or not"
|
39 | 83 | when: guest_os_ansible_system == "freebsd"
|
|
48 | 92 | when:
|
49 | 93 | - pgrep_result.rc is defined
|
50 | 94 | - pgrep_result.rc == 0
|
51 |
| - - pgrep_result.stdout_lines is defined |
52 |
| - - pgrep_result.stdout_lines | length > 0 |
| 95 | + - pgrep_result.stdout is defined |
| 96 | + - pgrep_result.stdout |
53 | 97 | block:
|
54 | 98 | - name: "Set fact of guest OS having desktop environment"
|
55 | 99 | ansible.builtin.set_fact:
|
56 | 100 | guest_os_with_gui: true
|
| 101 | + guest_os_session_type: |- |
| 102 | + {%- if 'Xorg' in pgrep_result.stdout -%}x11 |
| 103 | + {%- elif 'Xwayland' in pgrep_result.stdout -%}wayland |
| 104 | + {%- endif -%} |
57 | 105 |
|
58 | 106 | - name: "Check display manager on {{ vm_guest_os_distribution }}"
|
59 | 107 | ansible.builtin.shell: "grep -io -E '^(gdm|slim|lightdm|sddm|xdm)_enable=.*YES' /etc/rc.conf"
|
|
75 | 123 | msg:
|
76 | 124 | - "Guest OS has desktop environment: {{ guest_os_with_gui }}"
|
77 | 125 | - "Guest OS display manager: {{ guest_os_display_manager }}"
|
| 126 | + - "Guest OS session type: {{ guest_os_session_type }}" |
| 127 | + - "Guest OS session desktop: {{ guest_os_session_desktop }}" |
0 commit comments