Hi,
the diff prevents i3bar from starting here:
i3bar(26685): syscall 289 ""
gdb shows this:
#0 0x00000ae4d48740ca in shmget () at <stdin>:2
#1 0x00000ae502e15ae4 in can_use_shm () from
/usr/local/lib/libcairo.so.12.3
#2 0x00000ae502e15c3b in _cairo_xcb_connection_query_shm () from
/usr/local/lib/libcairo.so.12.3
#3 0x00000ae502e16330 in _cairo_xcb_connection_get () from
/usr/local/lib/libcairo.so.12.3
#4 0x00000ae502e18675 in _cairo_xcb_screen_get () from
/usr/local/lib/libcairo.so.12.3
#5 0x00000ae502e1c40a in cairo_xcb_surface_create () from
/usr/local/lib/libcairo.so.12.3
#6 0x00000ae20f90f9a0 in load_pango_font (font=0x7f7ffffed3b0,
desc=Variable "desc" is not available.
) at libi3/font.c:80
#7 0x00000ae20f90fd0c in load_font (pattern=0xae4b22fd0c0 "pango:DejaVu
Sans Mono 10", fallback=true)
at libi3/font.c:196
#8 0x00000ae20f9077e4 in init_xcb_late (fontname=Variable "fontname" is
not available.
) at i3bar/src/xcb.c:1226
#9 0x00000ae20f90c190 in got_bar_config (
reply=0xae461156200
"{\"id\":\"bar-1\",\"outputs\":[\"LVDS1\"],\"tray_padding\":2,\"mode\":\"dock\",\"hidden_state\":\"hide\",\"modifier\":\"Mod4\",\"position\":\"bottom\",\"status_command\":\"i3status
--config ~/.i3status-small.conf\",\"font\":\"pango:D"...) at i3bar/src/ipc.c:98
#10 0x00000ae20f90be33 in got_data (loop=Variable "loop" is not available.
) at i3bar/src/ipc.c:263
#11 0x00000ae4a9b5afae in ev_invoke_pending () from
/usr/local/lib/libev.so.3.1
#12 0x00000ae4a9b5f5e5 in ev_run () from /usr/local/lib/libev.so.3.1
#13 0x00000ae20f90b7ba in main (argc=Variable "argc" is not available.
) at ev.h:835
I have a font configuration in .i3/config, which triggers this:
font pango:DejaVu Sans Mono 10
After commenting that out, i3bar starts again.
Regards,
Ralf
* Theo Buehler <[email protected]> [2015-12-20 15:21]:
> On Sun, Dec 20, 2015 at 02:30:24PM +0100, David Coppa wrote:
> > On Sun, Dec 20, 2015 at 2:02 PM, Theo Buehler <[email protected]> wrote:
> > > I understand that pledging a port adds complexity to its maintenance
> > > and I am not convinced the patch below should be committed to the ports
> > > tree.
> > >
> > > However, since there appears to be a considerable numer of users of i3
> > > among OpenBSD users, there might be some interest in this patch, so I'd
> > > like to share it. I'd need some positive test reports to be persuaded
> > > to try to upstream this.
> >
> > Please refactor your diff on a very current -current, I've committed
> > an update for i3 yesterday...
> >
> > And please also protect the pledge code with "#if defined(__OpenBSD__)"
>
> Thanks!
>
> Index: Makefile
> ===================================================================
> RCS file: /var/cvs/ports/x11/i3/Makefile,v
> retrieving revision 1.99
> diff -u -p -r1.99 Makefile
> --- Makefile 18 Dec 2015 15:53:08 -0000 1.99
> +++ Makefile 20 Dec 2015 14:06:08 -0000
> @@ -3,7 +3,7 @@
> COMMENT = improved dynamic tiling window manager
>
> DISTNAME = i3-4.11
> -REVISION = 0
> +REVISION = 1
> CATEGORIES = x11
>
> EXTRACT_SUFX = .tar.bz2
> Index: patches/patch-i3-msg_main_c
> ===================================================================
> RCS file: patches/patch-i3-msg_main_c
> diff -N patches/patch-i3-msg_main_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-i3-msg_main_c 20 Dec 2015 13:52:48 -0000
> @@ -0,0 +1,18 @@
> +$OpenBSD$
> +
> +pledge for i3-msg:
> +rpath and unix needed for talking to the i3 socket in /tmp
> +
> +--- i3-msg/main.c.orig Wed Sep 30 08:55:10 2015
> ++++ i3-msg/main.c Sun Dec 20 14:42:51 2015
> +@@ -119,6 +119,10 @@ static yajl_callbacks reply_callbacks = {
> + };
> +
> + int main(int argc, char *argv[]) {
> ++#if defined(__OpenBSD__)
> ++ if (pledge("stdio rpath unix", NULL) == -1)
> ++ err(EXIT_FAILURE, "pledge");
> ++#endif
> + char *env_socket_path = getenv("I3SOCK");
> + if (env_socket_path)
> + socket_path = sstrdup(env_socket_path);
> Index: patches/patch-i3-nagbar_main_c
> ===================================================================
> RCS file: /var/cvs/ports/x11/i3/patches/patch-i3-nagbar_main_c,v
> retrieving revision 1.7
> diff -u -p -r1.7 patch-i3-nagbar_main_c
> --- patches/patch-i3-nagbar_main_c 4 Oct 2015 08:48:12 -0000 1.7
> +++ patches/patch-i3-nagbar_main_c 20 Dec 2015 14:05:53 -0000
> @@ -1,6 +1,14 @@
> $OpenBSD: patch-i3-nagbar_main_c,v 1.7 2015/10/04 08:48:12 dcoppa Exp $
> +
> +surprisingly wide pledge for this program
> +
> +"wpath cpath" for writing a script
> +"rpath getpw" for checking access permissions
> +"proc exec" for executing the script
> +"unix" for talking to the i3 socket
> +
> --- i3-nagbar/main.c.orig Wed Sep 30 08:55:10 2015
> -+++ i3-nagbar/main.c Fri Oct 2 16:58:54 2015
> ++++ i3-nagbar/main.c Sun Dec 20 15:00:22 2015
> @@ -170,7 +170,7 @@ static void handle_button_release(xcb_connection_t *co
> }
>
> @@ -9,4 +17,16 @@ $OpenBSD: patch-i3-nagbar_main_c,v 1.7 2
> + sasprintf(&terminal_cmd, "${X11BASE}/bin/xterm -e %s", link_path);
> printf("argv0 = %s\n", argv0);
> printf("terminal_cmd = %s\n", terminal_cmd);
> +
> +@@ -464,6 +464,11 @@ int main(int argc, char *argv[]) {
> +
> + font = load_font(pattern, true);
> + set_font(&font);
> ++
> ++#if defined(__OpenBSD__)
> ++ if (pledge("stdio rpath wpath cpath getpw proc exec unix", NULL) == -1)
> ++ err(EXIT_FAILURE, "pledge");
> ++#endif
> +
> + xcb_rectangle_t win_pos = get_window_position();
>
> Index: patches/patch-i3bar_src_main_c
> ===================================================================
> RCS file: patches/patch-i3bar_src_main_c
> diff -N patches/patch-i3bar_src_main_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-i3bar_src_main_c 20 Dec 2015 13:52:48 -0000
> @@ -0,0 +1,20 @@
> +$OpenBSD$
> +
> +stdio rpath unix for talking to the i3 socket
> +wpath for logging
> +proc exec to execute the bar
> +
> +--- i3bar/src/main.c.orig Wed Sep 30 08:55:10 2015
> ++++ i3bar/src/main.c Sun Dec 20 14:43:24 2015
> +@@ -95,6 +95,11 @@ int main(int argc, char **argv) {
> + char *socket_path = getenv("I3SOCK");
> + char *i3_default_sock_path = "/tmp/i3-ipc.sock";
> +
> ++#if defined(__OpenBSD__)
> ++ if (pledge("stdio rpath wpath proc exec unix", NULL) == -1)
> ++ err(EXIT_FAILURE, "pledge");
> ++#endif
> ++
> + /* Initialize the standard config to use 0 as default */
> + memset(&config, '\0', sizeof(config_t));
> +
> Index: patches/patch-src_main_c
> ===================================================================
> RCS file: /var/cvs/ports/x11/i3/patches/patch-src_main_c,v
> retrieving revision 1.14
> diff -u -p -r1.14 patch-src_main_c
> --- patches/patch-src_main_c 18 Dec 2015 15:53:09 -0000 1.14
> +++ patches/patch-src_main_c 20 Dec 2015 14:02:42 -0000
> @@ -2,8 +2,14 @@ $OpenBSD: patch-src_main_c,v 1.14 2015/1
>
> Bugfix: add keymap fall back (_XKB_RULES_NAMES, then defaults)
>
> +add pledge:
> +
> +"stdio rpath unix" for talking to the i3 socket in /tmp
> +"wpath cpath" are needed for the restart-in-place functionality
> +"proc exec" for executing programs
> +
> --- src/main.c.orig Wed Sep 30 08:55:10 2015
> -+++ src/main.c Fri Dec 18 13:58:58 2015
> ++++ src/main.c Sun Dec 20 14:58:54 2015
> @@ -87,6 +87,7 @@ struct ws_assignments_head ws_assignments = TAILQ_HEAD
>
> /* We hope that those are supported and set them to true */
> @@ -20,3 +26,17 @@ Bugfix: add keymap fall back (_XKB_RULES
> if (!extreply->present) {
> DLOG("xkb is not present on this server\n");
> } else {
> +@@ -784,6 +786,13 @@ int main(int argc, char *argv[]) {
> + xcb_free_gc(conn, gc);
> + xcb_free_pixmap(conn, pixmap);
> + }
> ++
> ++#if defined(__OpenBSD__)
> ++ /* can't pledge if shm_* calls are used */
> ++ if (shmlog_size == 0)
> ++ if (pledge("stdio rpath wpath cpath proc exec unix", NULL) == -1)
> ++ err(EXIT_FAILURE, "pledge");
> ++#endif
> +
> + struct sigaction action;
> +
>