Add desktop login test, revise and rename check_desktop

This adds a new test that implementsQA:Testcase_desktop_login
on both GNOME and KDE.

While working on this, we realized that the "desktop_clean"
needles were really "app menu" needles, and for KDE, this was
a duplication with the new "system menu" needles, because on KDE
the app menu and the system menu are the same. So I (Adam)
started to de-duplicate that, but also realized that "app menu
button" is a much more accurate name for these needles, so I was
renaming the old desktop_clean needles to app_menu_button. That
led me to the realization that "check_desktop_clean" is itself a
dumb name, because we don't (at least, any more, way back in the
mists of time we may have done) do anything to check that the
desktop is "clean" - we're really just asserting that we're at a
desktop *at all*. While thinking *that* through, I *also* realized
that the whole "open the overview and look for the app grid icon"
workaround it did is no longer necessary, because GNOME doesn't
use a translucent top bar any more. That went away in GNOME 3.32,
which is in Fedora 30, our oldest supported release.

So I threw that away, renamed the function "check_desktop",
cleaned up all the needle naming and tagging, and also added an
app menu needle for GNOME in Japanese because we were missing
one (the Japanese tests have been using the "app grid icon"
workaround the whole time).
This commit is contained in:
Lukáš Růžička 2020-03-20 10:04:43 +01:00 committed by Adam Williamson
parent 49c8d46744
commit f3d6a9574c
92 changed files with 947 additions and 106 deletions

View File

@ -72,6 +72,10 @@ for environment in ("anaconda", "gnome"):
for pkgset in ("kde", "workstation", "minimal"):
testliterals.append(f"anaconda_{pkgset}_highlighted")
testliterals.append(f"anaconda_{pkgset}_selected")
# desktop_login stuff
for user in ("jack", "jim"):
testliterals.append(f"login_{user}")
testliterals.append(f"user_confirm_{user}")
# partitioning stuff, there's a bunch of this, all in anaconda.pm
# multiple things use this
for part in ("swap", "root"):

View File

@ -7,7 +7,7 @@ use Exporter;
use lockapi;
use testapi;
our @EXPORT = qw/run_with_error_check type_safely type_very_safely desktop_vt boot_to_login_screen console_login console_switch_layout desktop_switch_layout console_loadkeys_us do_bootloader boot_decrypt check_release menu_launch_type repo_setup setup_workaround_repo cleanup_workaround_repo gnome_initial_setup anaconda_create_user check_desktop_clean download_modularity_tests quit_firefox advisory_get_installed_packages advisory_check_nonmatching_packages start_with_launcher quit_with_shortcut lo_dismiss_tip disable_firefox_studies select_rescue_mode copy_devcdrom_as_isofile bypass_1691487 get_release_number check_left_bar check_top_bar check_prerelease check_version spell_version_number _assert_and_click is_branched rec_log click_unwanted_notifications repos_mirrorlist register_application get_registered_applications/;
our @EXPORT = qw/run_with_error_check type_safely type_very_safely desktop_vt boot_to_login_screen console_login console_switch_layout desktop_switch_layout console_loadkeys_us do_bootloader boot_decrypt check_release menu_launch_type repo_setup setup_workaround_repo cleanup_workaround_repo gnome_initial_setup anaconda_create_user check_desktop download_modularity_tests quit_firefox advisory_get_installed_packages advisory_check_nonmatching_packages start_with_launcher quit_with_shortcut lo_dismiss_tip disable_firefox_studies select_rescue_mode copy_devcdrom_as_isofile bypass_1691487 get_release_number check_left_bar check_top_bar check_prerelease check_version spell_version_number _assert_and_click is_branched rec_log click_unwanted_notifications repos_mirrorlist register_application get_registered_applications solidify_wallpaper_kde/;
# We introduce this global variable to hold the list of applications that have
# registered during the apps_startstop_test when they have sucessfully run.
@ -727,42 +727,18 @@ sub anaconda_create_user {
}
}
sub check_desktop_clean {
# Check we're at a 'clean' desktop. This used to be a simple
# needle check, but Rawhide's default desktop is now one which
# changes over time, and the GNOME top bar is now translucent
# by default; together these changes mean it's impossible to
# make a reliable needle, so we need something more tricksy to
# cover that case. 'tries' is the amount of check cycles to run
# before giving up and failing; each cycle should take ~3 secs.
my %args = (
tries => 10,
@_
);
foreach my $i (1..$args{tries}) {
# we still *do* the needle check, for all cases it covers
return if (check_screen "graphical_desktop_clean", 1);
# now do the special GNOME case
if (get_var("DESKTOP") eq "gnome") {
send_key "super";
if (check_screen "overview_app_grid", 2) {
send_key "super";
wait_still_screen 3;
# go back to the desktop, if we're still at the app
# grid (can be a bit fuzzy depending on response lag)
while (check_screen "overview_app_grid", 1) {
send_key "super";
wait_still_screen 3;
}
return;
}
}
else {
# to keep the timing equal
sleep 2;
}
}
die "Clean desktop not reached!";
sub check_desktop {
# Check we're at a desktop. We do this by looking for the "apps"
# menu button ("Activities" button on GNOME, kicker button on
# KDE). This is set up as a helper function because, for a while,
# GNOME made the top bar translucent by default *and* we had an
# animated background by default, which made doing this solely
# with needle matches hard, so we had a workaround of trying to
# open the overview with the super key and match on the app grid
# icon. But GNOME has gone back to the top bar being a solid color
# by default, so we don't have this problem any more and this is
# back to just being a simple needle match.
assert_screen "apps_menu_button", 30;
}
sub download_modularity_tests {
@ -1203,4 +1179,36 @@ sub register_application {
print("APPLICATION REGISTERED: $application \n");
}
# The KDE desktop tests are very difficult to maintain, because the transparency
# of the menu requires a lot of different needles to cover the elements.
# Therefore it is useful to change the background to a solid colour.
# Since many needles have been already created with a black background
# we will keep it that way. The following code has been taken from the
# KDE startstop tests but it is good to have it here, because it will be
# needed more often now, it seems.
sub solidify_wallpaper_kde {
# Run the Desktop settings
hold_key 'alt';
send_key 'd';
send_key 's';
release_key 'alt';
# Select type of background
assert_and_click "deskset_select_type";
wait_still_screen 2;
# Select plain color type
assert_and_click "deskset_plain_color";
wait_still_screen 2;
# Open colors selection
assert_and_click "deskset_select_color";
wait_still_screen 2;
# Select black
assert_and_click "deskset_select_black";
wait_still_screen 2;
# Confirm
assert_and_click "kde_ok";
wait_still_screen 2;
# Close the application
assert_and_click "kde_ok";
}
1;

View File

@ -20,6 +20,6 @@
"DESKTOP-gnome",
"ENV-DISTRI-fedora",
"LANGUAGE-english",
"graphical_desktop_clean"
"apps_menu_button"
]
}
}

View File

Before

Width:  |  Height:  |  Size: 605 KiB

After

Width:  |  Height:  |  Size: 605 KiB

View File

@ -13,6 +13,6 @@
"DESKTOP-gnome",
"ENV-DISTRI-fedora",
"LANGUAGE-arabic",
"graphical_desktop_clean"
"apps_menu_button"
]
}
}

View File

Before

Width:  |  Height:  |  Size: 723 KiB

After

Width:  |  Height:  |  Size: 723 KiB

View File

@ -18,7 +18,7 @@
"tags": [
"DESKTOP-gnome",
"LANGUAGE-french",
"graphical_desktop_clean"
"apps_menu_button"
],
"properties": []
}
}

View File

Before

Width:  |  Height:  |  Size: 396 KiB

After

Width:  |  Height:  |  Size: 396 KiB

View File

@ -0,0 +1,16 @@
{
"area": [
{
"xpos": 15,
"ypos": 8,
"width": 99,
"height": 16,
"type": "match"
}
],
"properties": [],
"tags": [
"LANGUAGE-japanese",
"apps_menu_button"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 741 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"lock_button"
],
"area": [
{
"xpos": 734,
"ypos": 193,
"width": 59,
"height": 21,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"locked_screen_switch_user"
],
"area": [
{
"xpos": 963,
"ypos": 708,
"width": 22,
"height": 21,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"log_out_confirm"
],
"area": [
{
"xpos": 595,
"ypos": 441,
"width": 56,
"height": 22,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"log_out_entry"
],
"area": [
{
"xpos": 758,
"ypos": 258,
"width": 55,
"height": 20,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"ypos": 356,
"height": 28,
"type": "match",
"xpos": 415,
"width": 40
}
],
"properties": [],
"tags": [
"login_jack"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"width": 36,
"xpos": 420,
"type": "match",
"height": 25,
"ypos": 270
}
],
"properties": [],
"tags": [
"login_jack"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"ypos": 447,
"height": 23,
"type": "match",
"xpos": 415,
"width": 36
}
],
"properties": [],
"tags": [
"login_jim"
]
}

BIN
needles/gnome/login_jim.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"login_wrong_password"
],
"area": [
{
"xpos": 381,
"ypos": 487,
"width": 264,
"height": 22,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"power_entry"
],
"area": [
{
"xpos": 734,
"ypos": 226,
"width": 70,
"height": 19,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"power_off_confirm"
],
"area": [
{
"xpos": 622,
"ypos": 461,
"width": 76,
"height": 21,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"power_off_entry"
],
"area": [
{
"xpos": 753,
"ypos": 227,
"width": 93,
"height": 19,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"restart_confirm"
],
"area": [
{
"xpos": 486,
"ypos": 461,
"width": 55,
"height": 20,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -20,6 +20,6 @@
"DESKTOP-gnome",
"ENV-DISTRI-fedora",
"LANGUAGE-russian",
"graphical_desktop_clean"
"apps_menu_button"
]
}
}

View File

Before

Width:  |  Height:  |  Size: 724 KiB

After

Width:  |  Height:  |  Size: 724 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"switch_user_entry"
],
"area": [
{
"xpos": 758,
"ypos": 289,
"width": 96,
"height": 19,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"system_menu_button"
],
"area": [
{
"xpos": 969,
"ypos": 2,
"width": 45,
"height": 25,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 969,
"ypos": 2,
"width": 45,
"height": 25,
"type": "match"
}
],
"properties": [],
"tags": [
"system_menu_button"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"height": 21,
"type": "match",
"width": 41,
"xpos": 192,
"ypos": 162
}
],
"properties": [],
"tags": [
"user_confirm_jack"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 194,
"ypos": 165,
"width": 31,
"height": 15,
"type": "match"
}
],
"properties": [],
"tags": [
"user_confirm_jim"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 KiB

View File

@ -1,15 +1,16 @@
{
"area": [
{
"xpos": 618,
"ypos": 514,
"width": 43,
"height": 17,
"type": "match"
}
],
"properties": [],
"tags": [
"kde_ok"
]
{
"area": [
{
"xpos": 618,
"ypos": 514,
"width": 43,
"height": 17,
"type": "match"
}
],
"properties": [],
"tags": [
"kde_ok",
"add_button"
]
}

View File

@ -1,7 +1,8 @@
{
"properties": [],
"tags": [
"konsole_runs"
"konsole_runs",
"apps_run_terminal"
],
"area": [
{

View File

@ -1,16 +0,0 @@
{
"area": [
{
"ypos": 733,
"type": "match",
"width": 36,
"height": 35,
"xpos": 0
}
],
"tags": [
"DESKTOP-kde",
"graphical_desktop_clean"
],
"properties": []
}

View File

@ -0,0 +1,16 @@
{
"properties": [],
"tags": [
"leave_button",
"power_entry"
],
"area": [
{
"xpos": 412,
"ypos": 655,
"width": 32,
"height": 32,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 73,
"height": 17,
"width": 43,
"ypos": 242,
"type": "match"
}
],
"properties": [],
"tags": [
"lock_button"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"type": "match",
"xpos": 76,
"height": 20,
"width": 55,
"ypos": 281
}
],
"properties": [],
"tags": [
"log_out_entry"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"ypos": 390,
"xpos": 202,
"width": 109,
"type": "match",
"height": 19
}
],
"properties": [],
"tags": [
"login_jack"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"ypos": 389,
"xpos": 601,
"width": 77,
"type": "match",
"height": 22
}
],
"properties": [],
"tags": [
"login_jim"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"height": 17,
"type": "match",
"width": 76,
"xpos": 472,
"ypos": 393
}
],
"properties": [],
"tags": [
"login_jim"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"login_wrong_password"
],
"area": [
{
"xpos": 464,
"ypos": 416,
"width": 98,
"height": 20,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View File

@ -0,0 +1,16 @@
{
"properties": [],
"tags": [
"log_out_confirm",
"power_off_confirm"
],
"area": [
{
"xpos": 435,
"ypos": 575,
"width": 45,
"height": 19,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -0,0 +1,17 @@
{
"area": [
{
"height": 24,
"type": "match",
"width": 25,
"xpos": 5,
"ypos": 738
}
],
"properties": [],
"tags": [
"DESKTOP-kde",
"system_menu_button",
"apps_menu_button"
]
}

View File

Before

Width:  |  Height:  |  Size: 748 KiB

After

Width:  |  Height:  |  Size: 748 KiB

View File

@ -13,6 +13,7 @@
],
"tags": [
"DESKTOP-kde",
"graphical_desktop_clean"
"apps_menu_button",
"system_menu_button"
]
}
}

View File

Before

Width:  |  Height:  |  Size: 499 KiB

After

Width:  |  Height:  |  Size: 499 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"power_off_entry"
],
"area": [
{
"xpos": 76,
"ypos": 514,
"width": 77,
"height": 17,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"height": 26,
"type": "match",
"width": 30,
"xpos": 30,
"ypos": 435
}
],
"properties": [],
"tags": [
"reboot_entry"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"height": 38,
"type": "match",
"width": 39,
"xpos": 449,
"ypos": 610
}
],
"properties": [],
"tags": [
"reboot_icon"
]
}

BIN
needles/kde/reboot_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"switch_user_entry"
],
"area": [
{
"xpos": 75,
"ypos": 321,
"width": 84,
"height": 17,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"user_confirm_jack"
],
"area": [
{
"xpos": 93,
"ypos": 137,
"width": 40,
"height": 21,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"type": "match",
"ypos": 135,
"width": 35,
"xpos": 91,
"height": 21
}
],
"properties": [],
"tags": [
"user_confirm_jim"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"width": 32,
"ypos": 66,
"xpos": 9,
"type": "match",
"height": 21
}
],
"properties": [],
"tags": [
"user_confirm_jim"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -609,6 +609,19 @@
"START_AFTER_TEST": "install_default_upload"
}
},
"desktop_login": {
"profiles": {
"fedora-KDE-live-iso-x86_64-*-64bit": 30,
"fedora-Workstation-live-iso-x86_64-*-64bit": 30,
"fedora-Workstation-live-iso-ppc64le-*-ppc64le": 30
},
"settings": {
"BOOTFROM": "c",
"HDD_1": "disk_%FLAVOR%_%MACHINE%.qcow2",
"POSTINSTALL": "desktop_login",
"START_AFTER_TEST": "install_default_upload"
}
},
"desktop_browser": {
"profiles": {
"fedora-KDE-live-iso-x86_64-*-64bit": 22,

View File

@ -29,7 +29,7 @@ sub run {
send_key "esc";
send_key "esc";
send_key "esc";
check_desktop_clean;
check_desktop;
}
}

View File

@ -91,7 +91,7 @@ sub run {
# Move the mouse somewhere it won't highlight the match areas
mouse_set(300, 800);
# KDE can take ages to start up
check_desktop_clean(tries=>40);
check_desktop(tries=>40);
}
sub test_flags {

View File

@ -8,28 +8,7 @@ use utils;
sub run {
my $self = shift;
# Run the Desktop settings
hold_key 'alt';
send_key 'd';
send_key 's';
release_key 'alt';
# Select type of background
assert_and_click "deskset_select_type";
wait_still_screen 2;
# Select plain color type
assert_and_click "deskset_plain_color";
wait_still_screen 2;
# Open colors selection
assert_and_click "deskset_select_color";
wait_still_screen 2;
# Select black
assert_and_click "deskset_select_black";
wait_still_screen 2;
# Confirm
assert_and_click "kde_ok";
wait_still_screen 2;
# Close the application
assert_and_click "kde_ok";
solidify_wallpaper_kde;
# get rid of unwanted notifications that interfere with tests
click_unwanted_notifications;
}

View File

@ -4,7 +4,7 @@ use testapi;
use utils;
sub run {
check_desktop_clean;
check_desktop;
# If we want to check that there is a correct background used, as a part
# of self identification test, we will do it here. For now we don't do
# this for Rawhide as Rawhide doesn't have its own backgrounds and we

View File

@ -27,7 +27,7 @@ sub _open_new_tab {
sub run {
my $self = shift;
check_desktop_clean;
check_desktop;
send_key 'alt-f1';
# wait out animations
wait_still_screen(stilltime=>2, similarity_level=>45);

335
tests/desktop_login.pm Normal file
View File

@ -0,0 +1,335 @@
use base "installedtest";
use strict;
use testapi;
use utils;
our $desktop = get_var("DESKTOP");
our $syspwd = get_var("USER_PASSWORD") || "weakpassword";
our $term = "gnome-terminal";
if ($desktop eq "kde") {
$term = "konsole";
}
sub type_password {
# Safe typing prolongs the operation terribly.
# Let's just use type_string and wait afterwards.
my $string = shift;
type_string "$string\n";
sleep 3;
}
sub adduser {
# Add user to the system.
my %args = @_;
$args{termstart} //= 1;
$args{termstop} //= 1;
my $name = $args{name};
my $login = $args{login};
my $password = $args{password};
if ($args{termstart}) {
menu_launch_type $term;
wait_still_screen 2;
assert_screen "apps_run_terminal";
type_very_safely "sudo -i\n";
type_password $syspwd;
}
assert_script_run "useradd -c '$name' $login";
if ($password ne "askuser") {
# If we want to create a user with a defined password.
type_very_safely "passwd $login\n";
type_password $password;
type_password $password;
}
else {
# If we want to create a user without a password,
# that forces GDM to create a password upon the
# first login.
assert_script_run "passwd -d $login";
assert_script_run "chage --lastday 0 $login";
}
assert_script_run "grep $login /etc/passwd";
# Disable Gnome initial setup on accounts when testing
# inside Gnome.
if ($desktop eq "gnome") {
assert_script_run "mkdir /home/$login/.config";
assert_script_run "echo 'yes' >> /home/$login/.config/gnome-initial-setup-done";
}
if ($args{termstop}) {
type_very_safely "exit\n";
send_key 'alt-f4';
}
}
sub lock_screen {
# Click on buttons to lock the screen.
#my $desktop = get_var("DESKTOP");
assert_and_click "system_menu_button";
if ($desktop eq "kde") {
assert_and_click "leave_button";
}
assert_and_click "lock_button";
wait_still_screen 10;
}
sub login_user {
# Do steps to unlock a previously locked screen. We use it to handle
# logins as well, because it is practically the same.
my %args = @_;
$args{checklogin} //= 1;
$args{method} //= "";
my $user = $args{user};
my $password = $args{password};
my $method = $args{method};
if (!check_screen "login_$user") {
# Sometimes, especially in SDDM, we do not get the user list
# but rather a "screensaver" screen for the DM. If this is the
# case, hit Enter to bring back the user list.
send_key "ret";
wait_still_screen 5;
}
if ($method ne "unlock") {
# When we do not just want to unlock the screen, we need to select a user.