Skip to content

Commit

Permalink
Kernel+WindowServer: Move setting tty graphical mode to Userspace
Browse files Browse the repository at this point in the history
This will allow using the console tty and WindowServer regardless of
your kernel command line. Also this fixes a bug where, when booting in
text mode, the console was in graphical mode, and would not accept
input.
  • Loading branch information
petelliott authored and awesomekling committed Apr 29, 2022
1 parent 4b0be17 commit 12c7b95
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
2 changes: 2 additions & 0 deletions Base/etc/SystemServer.ini
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ SocketPermissions=660
Priority=high
KeepAlive=true
User=window
# Ensure windowserver has a controlling TTY.
StdIO=/dev/tty0

[InspectorServer]
Socket=/tmp/portal/inspector,/tmp/portal/inspectables
Expand Down
3 changes: 0 additions & 3 deletions Kernel/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -377,9 +377,6 @@ void init_stage2(void*)
// NOTE: Everything marked UNMAP_AFTER_INIT becomes inaccessible after this point.
MM.unmap_text_after_init();

// FIXME: It would be nicer to set the mode from userspace.
// FIXME: It would be smarter to not hardcode that the first tty is the only graphical one
ConsoleManagement::the().first_tty()->set_graphical(GraphicsManagement::the().framebuffer_devices_exist());
RefPtr<Thread> thread;
auto userspace_init = kernel_command_line().userspace_init();
auto init_args = kernel_command_line().userspace_init_args();
Expand Down
12 changes: 10 additions & 2 deletions Userland/Services/WindowServer/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

ErrorOr<int> serenity_main(Main::Arguments)
{
TRY(Core::System::pledge("stdio video thread sendfd recvfd accept rpath wpath cpath unix proc sigaction exec"));
TRY(Core::System::pledge("stdio video thread sendfd recvfd accept rpath wpath cpath unix proc sigaction exec tty"));
TRY(Core::System::unveil("/res", "r"));
TRY(Core::System::unveil("/tmp", "cw"));
TRY(Core::System::unveil("/etc/WindowServer.ini", "rwc"));
Expand All @@ -34,7 +34,7 @@ ErrorOr<int> serenity_main(Main::Arguments)
act.sa_flags = SA_NOCLDWAIT;
act.sa_handler = SIG_IGN;
TRY(Core::System::sigaction(SIGCHLD, &act, nullptr));
TRY(Core::System::pledge("stdio video thread sendfd recvfd accept rpath wpath cpath unix proc exec"));
TRY(Core::System::pledge("stdio video thread sendfd recvfd accept rpath wpath cpath unix proc exec tty"));

auto wm_config = TRY(Core::ConfigFile::open("/etc/WindowServer.ini"));
auto theme_name = wm_config->read_entry("Theme", "Name", "Default");
Expand All @@ -50,6 +50,14 @@ ErrorOr<int> serenity_main(Main::Arguments)
Gfx::FontDatabase::set_default_font_query(default_font_query);
Gfx::FontDatabase::set_fixed_width_font_query(fixed_width_font_query);

{
// FIXME: Map switched tty from screens.
// FIXME: Gracefully cleanup the TTY graphics mode.
int tty_fd = TRY(Core::System::open("/dev/tty", O_RDWR));
TRY(Core::System::ioctl(tty_fd, KDSETMODE, KD_GRAPHICS));
TRY(Core::System::close(tty_fd));
}

WindowServer::EventLoop loop;

TRY(Core::System::pledge("stdio video thread sendfd recvfd accept rpath wpath cpath proc exec"));
Expand Down

0 comments on commit 12c7b95

Please sign in to comment.