Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

i3 crash on headless start via NoMachine #6027

Closed
2 tasks done
DanielAW opened this issue Apr 28, 2024 · 8 comments · Fixed by #6028
Closed
2 tasks done

i3 crash on headless start via NoMachine #6027

DanielAW opened this issue Apr 28, 2024 · 8 comments · Fixed by #6028
Assignees
Labels
4.23 bug reproducible A bug that has been reviewed and confirmed by a project contributor

Comments

@DanielAW
Copy link

Welcome

  • Yes, I'm using the latest major release or the current development version. These are the only supported versions.
  • Yes, I've searched similar issues and discussions on GitHub and didn't find any.

Current Behavior

By starting i3 via NoMachine in a headless configuration (virtual Framebuffer) it crashes with a coredump:

Apr 28 18:43:55 nb04 systemd[1]: Started Process Core Dump (PID 16811/UID 0).
Apr 28 18:43:55 nb04 systemd-coredump[16812]: [🡕] Process 16790 (i3) of user 1000 dumped core.

                                              Stack trace of thread 16790:
                                              #0  0x00007eafa0c15082 n/a (libc.so.6 + 0x5f082)
                                              #1  0x00005e8657ca83cb errorlog (i3 + 0x473cb)
                                              #2  0x00005e8657cc4762 mkdirp (i3 + 0x63762)
                                              #3  0x00005e8657cc2f40 get_process_filename (i3 + 0x61f40)
                                              #4  0x00005e8657ca7dfd init_logging (i3 + 0x46dfd)
                                              #5  0x00005e8657c72810 main (i3 + 0x11810)
                                              #6  0x00007eafa0bdbcd0 n/a (libc.so.6 + 0x25cd0)
                                              #7  0x00007eafa0bdbd8a __libc_start_main (libc.so.6 + 0x25d8a)
                                              #8  0x00005e8657c75f05 _start (i3 + 0x14f05)
                                              ELF object binary architecture: AMD x86-64
Apr 28 18:43:55 nb04 systemd[1]: systemd-coredump@4-16811-0.service: Deactivated successfully.

Expected Behavior

No crash when starting with NoMachine headless

Reproduction Instructions

  • Make sure no Login Manager is running (e.g. systemctl stop lightdm)
  • Connect to machine running i3 via NoMachine
  • The following DefaultDesktopCommand is used:
    DefaultDesktopCommand "env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -ud)/bus /usr/bin/i3"

i3 version

Binary i3 version:  4.23-28-g5834b7e8 © 2009 Michael Stapelberg and contributors

Running version: < 4.2-200

Config file

# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#

# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!

set $mod Mod4

# Handle Borders
for_window [class="^.*"] border pixel 2
                          # class                 border  backgr. text    indicator child_border
for_window [class="^.*"] client.focused          #77dd77 #285577 #ffffff #2e9ef4   #285577


# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:monospace 8

# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
#font pango:DejaVu Sans Mono 8

# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.

# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
#exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork

# NetworkManager is the most popular way to manage wireless networks on Linux,
# and nm-applet is a desktop environment-independent system tray GUI for it.
#exec --no-startup-id nm-applet

# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status

# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod

# start a terminal
#bindsym $mod+Return exec i3-sensible-terminal
#bindsym $mod+Return exec urxvt
bindsym $mod+Return exec alacritty

# kill focused window
bindsym $mod+Shift+q kill

# start dmenu (a program launcher)
#bindsym $mod+d exec --no-startup-id dmenu_run
bindsym $mod+d exec --no-startup-id rofi -show drun
# A more modern dmenu replacement is rofi:
# bindcode $mod+40 exec "rofi -modi drun,run -show drun"
# There also is i3-dmenu-desktop which only displays applications shipping a
# .desktop file. It is a wrapper around dmenu, so you need that installed.
# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop

# change focus
#bindsym $mod+j focus left
#bindsym $mod+k focus down
#bindsym $mod+l focus up
#bindsym $mod+semicolon focus right


# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

# move focused window
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+semicolon move right

# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

# split in horizontal orientation
bindsym $mod+h split h

# split in vertical orientation
bindsym $mod+v split v

# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle

# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split

# toggle tiling / floating
bindsym $mod+Shift+space floating toggle

# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle

# focus the parent container
bindsym $mod+a focus parent

# focus the child container
#bindsym $mod+d focus child

# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"

# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10

# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10

# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"

# resize window (you can also use the mouse for that)
mode "resize" {
        # These bindings trigger as soon as you enter the resize mode

        # Pressing left will shrink the window’s width.
        # Pressing right will grow the window’s width.
        # Pressing up will shrink the window’s height.
        # Pressing down will grow the window’s height.
        bindsym j resize shrink width 10 px or 10 ppt
        bindsym k resize grow height 10 px or 10 ppt
        bindsym l resize shrink height 10 px or 10 ppt
        bindsym semicolon resize grow width 10 px or 10 ppt

        # same bindings, but for the arrow keys
        bindsym Left resize shrink width 10 px or 10 ppt
        bindsym Down resize grow height 10 px or 10 ppt
        bindsym Up resize shrink height 10 px or 10 ppt
        bindsym Right resize grow width 10 px or 10 ppt

        # back to normal: Enter or Escape or $mod+r
        bindsym Return mode "default"
        bindsym Escape mode "default"
        bindsym $mod+r mode "default"
}

bindsym $mod+r mode "resize"

set $Locker i3lock && sleep 1

set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown
mode "$mode_system" {
    bindsym l exec --no-startup-id $Locker, mode "default"
    bindsym e exec --no-startup-id i3-msg exit, mode "default"
    bindsym s exec --no-startup-id $Locker && systemctl suspend, mode "default"
    bindsym h exec --no-startup-id $Locker && systemctl hibernate, mode "default"
    bindsym r exec --no-startup-id systemctl reboot, mode "default"
    bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default"  

    # back to normal: Enter or Escape
    bindsym Return mode "default"
    bindsym Escape mode "default"
}

bindsym $mod+l mode "$mode_system"

#bindsym $mod+j exec rofi -show window -kb-accept-entry "!Alt-Tab,!Alt+Alt_L" -kb-row-down "Alt+Tab" -selected-row 1
bindsym $mod+j exec /home/daniel/.config/i3/scripts/i3-alt-tab.py next current
bindsym $mod+k exec /home/daniel/.config/i3/scripts/i3-alt-tab.py prev current

# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
        status_command i3status
}

floating_minimum_size 500 x 300
floating_maximum_size 2000 x 1500

exec xinput --set-prop "TPPS/2 Elan TrackPoint" "libinput Accel Speed" 0.4
exec xinput --set-prop "TPPS/2 Elan TrackPoint" "libinput Accel Profile Enabled" 1, 0
exec xinput --set-prop "SynPS/2 Synaptics TouchPad" "libinput Accel Speed" 0.8

# screen brightness controls
bindsym XF86MonBrightnessUp exec xbacklight -inc 10
bindsym XF86MonBrightnessDown exec xbacklight -dec 10

#exec xscreensaver -no-splash
#exec xss-lock -- i3lock -n &
#exec vorta --daemonize &

Linux distribution & Version

Arch Linux

Are you using a compositor?

I am sure I don't run any compositor

Logfile

No response

@DanielAW DanielAW added the bug label Apr 28, 2024
@i3bot
Copy link

i3bot commented Apr 28, 2024

I don’t see a link to logs.i3wm.org. Did you follow https://i3wm.org/docs/debugging.html? (In case you actually provided a link to a logfile, please ignore me.)

@i3bot i3bot added missing-log Read the CONTRIBUTING.md file for instructions 4.23 labels Apr 28, 2024
@DanielAW
Copy link
Author

DanielAW commented Apr 28, 2024

I tried to create the logs but i3-dump-log can not be executed because the process is already dead and no X server was started.

@orestisfl
Copy link
Member

Thank you. Any chance you can get an i3 binary with debug symbols (e.g. by building it from source) so that we can have accurate source code lines in the stacktrace?

@DanielAW
Copy link
Author

I managed to work around it be setting XDG_RUNTIME_DIR like this in the node.cfg of NoMachine:
DefaultDesktopCommand "env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus XDG_RUNTIME_DIR=/run/user/$(id -u) /usr/bin/i3"

@DanielAW
Copy link
Author

Thank you. Any chance you can get an i3 binary with debug symbols (e.g. by building it from source) so that we can have accurate source code lines in the stacktrace?

I did compile it from source using the PKGFILE from Arch Linux. I did set the option to strip the binary, here is what I'm running:
/usr/bin/i3: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2ff073ac87f580eafe8aee20221a5e06ab44d29f, for GNU/Linux 4.4.0, not stripped

@orestisfl
Copy link
Member

arch has a debug option that you can also apply per package: https://wiki.archlinux.org/title/Debugging/Getting_traces#Compilation_options

Additionally, setting CFLAGS="-Og -ggdb3" can't harm

@orestisfl
Copy link
Member

Actually from the stack trace we can still likely infer what happened:

  1. i3 is initializing logging (init_logging)
  2. In get_process_filename it tries to do a get_process_filename(XDG_RUNTIME_DIR)
  3. mkdirp runs in an error and tries to logging
  4. logging is not enabled so it ends up in a SEGFAULT

@orestisfl
Copy link
Member

I can reproducing by printing "hello world" at the top of mkdirp():

diff --git a/libi3/mkdirp.c b/libi3/mkdirp.c
index 8bdca0c3..a5ee326d 100644
--- a/libi3/mkdirp.c
+++ b/libi3/mkdirp.c
@@ -18,6 +18,7 @@
  *
  */
 int mkdirp(const char *path, mode_t mode) {
+    ELOG("hello world!\n");
     if (mkdir(path, mode) == 0) {
         return 0;
     }

@orestisfl orestisfl added reproducible A bug that has been reviewed and confirmed by a project contributor and removed missing-log Read the CONTRIBUTING.md file for instructions labels Apr 28, 2024
orestisfl added a commit to orestisfl/i3 that referenced this issue Apr 28, 2024
@orestisfl orestisfl self-assigned this Apr 28, 2024
orestisfl added a commit to orestisfl/i3 that referenced this issue Apr 28, 2024
orestisfl added a commit that referenced this issue Apr 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
4.23 bug reproducible A bug that has been reviewed and confirmed by a project contributor
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants