New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 828703 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
Closed: May 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 1
Type: Bug



Sign in to add a comment

Terminal-emulator "terminator" Segfault on Crostini

Project Member Reported by yzd@google.com, Apr 4 2018

Issue description

Google Chrome	67.0.3383.0 (Official Build) dev (64-bit)
Revision	b6c093c42e2a0eb8c2d8c9dc76171b59dc65568d-refs/heads/master@{#546671}
Platform	10539.0.0 (Official Build) dev-channel eve
Firmware Version	Google_Eve.9584.107.0

OS: Chrome OS

Repro steps:
1. Start crostini linux container following instructions in go/crostini-instructions
2. Install 'terminator' by doing "sudo apt-get install terminator"
3. Run 'terminator'

Expected: The multi-tab terminal emulator 'terminator' should run in a GUI window
Actual: "Segmentation fault" is printed on console.

 
Owner: dgreid@chromium.org
Status: Assigned (was: Untriaged)
I'm also seeing a segfault. @dgreid, can someone look into what's happening?

Note: had to install dbus-x11 and also run the following to create a config file (see [1]):
mkdir -p ~/.config/terminator
touch ~/.config/terminator/config

[1] https://bugs.launchpad.net/terminator/+bug/1668245
Labels: M-68 Pri-1
Labels: Hotlist-Crostini-Platform

Comment 4 by vapier@chromium.org, May 23 2018

Labels: -Restrict-View-Google
Cc: dgreid@chromium.org reve...@chromium.org
Owner: jkardatzke@chromium.org
Status: Started (was: Assigned)
I took a look into this and the crash is happening in /usr/share/terminator/terminatorlib/window.py when it executes Keybinder.bind in this block of code:

         # Attempt to grab a global hotkey for hiding the window.
         # If we fail, we'll never hide the window, iconifying instead.
         if self.config['keybindings']['hide_window'] != None:
             if display_manager() == 'X11':
                 try:
                     self.hidebound = Keybinder.bind(
                         self.config['keybindings']['hide_window'].replace('<Shift>',''),
                         self.on_hide_window)
                 except (KeyError, NameError):
                     pass
 
                 if not self.hidebound:
                     err('Unable to bind hide_window key, another instance/window has it.')
                     self.hidefunc = self.iconify
                 else:
                     self.hidefunc = self.hide
 
In C, the stacktrace ends up failing at the top here:

XkbUseExtension
XkbGetUpdatedMap
XkbGetMap

So this is some kind of keybinding issue.

Ahhh...here's a terminator bug for something like this:

https://bugs.launchpad.net/terminator/+bug/1647896

Which says they detect if it's X11 (like you see in the code above) and only do the keybinding that way because it segfaults with Wayland. :p So I'm guessing since we're pretending to be X11 with it...but truly are Wayland...we're hitting this problem.

Dave, I'm assuming this one would be in your area to fix then?
It seems like they expect WAYLAND_DISPLAY to be set: https://bazaar.launchpad.net/~gnome-terminator/terminator/gtk3/view/head:/terminatorlib/util.py#L342

That seems incorrect as there's no requirement for it to be set on a wayland enabled desktop environment. Applications are expected to check for wayland-0 in XDG_RUNTIME_DIR even if this is not set.

This will likely work:

$ WAYLAND_DISPLAY=wayland-0 terminator

I guess it doesn't hurt to set WAYLAND_DISPLAY for crostini. We'll need to add something to /etc/profile.d/sommelier.sh for this. Or wherever we plan to have these variables set in the future.

Comment 7 by yzd@google.com, May 29 2018

Just tried

$ WAYLAND_DISPLAY=wayland-0 terminator

And it works now!

Thank you!
If I edit /etc/profile.d/sommelier.sh and have it export that var, then it works when I run it from the command line...but not when I run it from the launcher. Would I also need to set this for the garcon environment?
Yes, we need to set it there too.
OK, I'll take care of those.
Project Member

Comment 11 by bugdroid1@chromium.org, May 30 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/containers/cros-container-guest-tools/+/2b9228bb88b1f925a7e41afe8e153277498134a0

commit 2b9228bb88b1f925a7e41afe8e153277498134a0
Author: Jeffrey Kardatzke <jkardatzke@google.com>
Date: Wed May 30 22:32:10 2018

Add WAYLAND_DISPLAY env var for sommelier

BUG= chromium:828703 
TEST=Launching terminator in terminal/launcher works

Change-Id: Ied28b2ac7ec44bab3f1392e4c2f10181f3111993
Reviewed-on: https://chromium-review.googlesource.com/1077608
Reviewed-by: Jeffrey Kardatzke <jkardatzke@google.com>
Commit-Queue: Jeffrey Kardatzke <jkardatzke@google.com>
Tested-by: Jeffrey Kardatzke <jkardatzke@google.com>

[modify] https://crrev.com/2b9228bb88b1f925a7e41afe8e153277498134a0/cros-sommelier/sommelier.sh
[modify] https://crrev.com/2b9228bb88b1f925a7e41afe8e153277498134a0/cros-sommelier/BUILD
[modify] https://crrev.com/2b9228bb88b1f925a7e41afe8e153277498134a0/cros-sommelier/sommelier@.service

Project Member

Comment 12 by bugdroid1@chromium.org, May 30 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/containers/cros-container-guest-tools/+/f9f959d5dc95008113f8e1ad1f3dfed7c3d2c576

commit f9f959d5dc95008113f8e1ad1f3dfed7c3d2c576
Author: Jeffrey Kardatzke <jkardatzke@google.com>
Date: Wed May 30 22:47:04 2018

Also import SOMMELIER_VERSION

Bug:  chromium:828703 
Change-Id: I6887f6e4161afeb5bfefbb4bbfa131944f3e52f9
Reviewed-on: https://chromium-review.googlesource.com/1080168
Tested-by: Jeffrey Kardatzke <jkardatzke@google.com>
Reviewed-by: David Reveman <reveman@chromium.org>
Commit-Queue: Jeffrey Kardatzke <jkardatzke@google.com>

[modify] https://crrev.com/f9f959d5dc95008113f8e1ad1f3dfed7c3d2c576/cros-sommelier/BUILD
[modify] https://crrev.com/f9f959d5dc95008113f8e1ad1f3dfed7c3d2c576/cros-sommelier/sommelier@.service

Project Member

Comment 13 by bugdroid1@chromium.org, May 31 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/containers/cros-container-guest-tools/+/85c0890041d1bc575cff42076c6a1329bebee098

commit 85c0890041d1bc575cff42076c6a1329bebee098
Author: David Reveman <reveman@chromium.org>
Date: Thu May 31 15:08:50 2018

Set DISPLAY, XCURSOR_SIZE and WAYLAND_DISPLAY if not set.

BUG= chromium:828703 
TEST=They are set after launching terminal

Change-Id: I5d2f7bd6201afb5e93e4b964c58d3f72c2ac3dd0
Reviewed-on: https://chromium-review.googlesource.com/1079843
Tested-by: David Reveman <reveman@chromium.org>
Reviewed-by: Jeffrey Kardatzke <jkardatzke@google.com>
Commit-Queue: Jeffrey Kardatzke <jkardatzke@google.com>

[modify] https://crrev.com/85c0890041d1bc575cff42076c6a1329bebee098/cros-sommelier/sommelier.sh
[modify] https://crrev.com/85c0890041d1bc575cff42076c6a1329bebee098/cros-sommelier/BUILD

Project Member

Comment 14 by bugdroid1@chromium.org, May 31 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/11e9332f144597fbd153c5c10f06d35343fd95c3

commit 11e9332f144597fbd153c5c10f06d35343fd95c3
Author: David Reveman <reveman@chromium.org>
Date: Thu May 31 19:26:09 2018

vm_tools: sommelier: spawn child process before master is ready

This makes master instances spawn and wait for child process to
exit before notifying systemd that it's ready to accept
connections.

BUG= chromium:828703 
TEST=sommelier --master --socket=wayland-1 /bin/sh -c "echo \$WAYLAND_DISPLAY"

Change-Id: Ie948c41352657dbe34eb3bc4c5f7cb07ed140c57
Reviewed-on: https://chromium-review.googlesource.com/1079758
Commit-Ready: David Reveman <reveman@chromium.org>
Tested-by: David Reveman <reveman@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Reviewed-by: Jeffrey Kardatzke <jkardatzke@google.com>

[modify] https://crrev.com/11e9332f144597fbd153c5c10f06d35343fd95c3/vm_tools/sommelier/sommelier.c

Status: Fixed (was: Started)

Sign in to add a comment