diff --git a/.gitlab-ci-unix.yml b/.gitlab-ci-unix.yml
index a4da23981d5c4211b4abb21fca55856dd47d2176..d57c5586838aff0408397bc2ac23d544f5cb738c 100644
--- a/.gitlab-ci-unix.yml
+++ b/.gitlab-ci-unix.yml
@@ -15,6 +15,8 @@ spec:
       default: 'no'
     has_curses:
       default: 'yes'
+    has_gtk:
+      default: 'no'
 ---
 
 ".$[[ inputs.os ]]":
@@ -459,6 +461,101 @@ spec:
   needs:
     - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [xpdev]"
 
+"$[[ inputs.os ]]-$[[ inputs.platform ]] [gtkchat]":
+  extends:
+    - .$[[ inputs.os ]]-build
+  script:
+    - cd src/sbbs3/gtkchat
+    - touch depend
+    - touch xpdev
+    - touch xpdev-mt
+    - touch encode
+    - touch hash
+    - touch smblib
+    - gmake $[[ inputs.build_flags ]] $BUILD_ARGS
+  artifacts:
+    name: "gtkchat-$[[ inputs.os ]]-$[[ inputs.platform ]]"
+    paths:
+      - "src/sbbs3/gtkchat/*.exe.release/*"
+  needs:
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [xpdev]"
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [encode]"
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [hash]"
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [smblib]"
+  rules:
+    - if: '"$[[ inputs.has_gtk ]]" == "no"'
+      when: never
+    - !reference [.rules, rules]
+
+"$[[ inputs.os ]]-$[[ inputs.platform ]] [gtkmonitor]":
+  extends:
+    - .$[[ inputs.os ]]-build
+  script:
+    - cd src/sbbs3/gtkmonitor
+    - touch depend
+    - touch xpdev
+    - touch xpdev-mt
+    - touch smblib
+    - gmake $[[ inputs.build_flags ]] $BUILD_ARGS
+  artifacts:
+    name: "gtkmonitor-$[[ inputs.os ]]-$[[ inputs.platform ]]"
+    paths:
+      - "src/sbbs3/gtkmonitor/*.exe.release/*"
+  needs:
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [xpdev]"
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [smblib]"
+  rules:
+    - if: '"$[[ inputs.has_gtk ]]" == "no"'
+      when: never
+    - !reference [.rules, rules]
+
+"$[[ inputs.os ]]-$[[ inputs.platform ]] [gtkuseredit]":
+  extends:
+    - .$[[ inputs.os ]]-build
+  script:
+    - cd src/sbbs3/gtkuseredit
+    - touch depend
+    - touch xpdev
+    - touch xpdev-mt
+    - touch smblib
+    - gmake $[[ inputs.build_flags ]] $BUILD_ARGS
+  artifacts:
+    name: "gtkuseredit-$[[ inputs.os ]]-$[[ inputs.platform ]]"
+    paths:
+      - "src/sbbs3/gtkuseredit/*.exe.release/*"
+  needs:
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [xpdev]"
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [smblib]"
+  rules:
+    - if: '"$[[ inputs.has_gtk ]]" == "no"'
+      when: never
+    - !reference [.rules, rules]
+
+"$[[ inputs.os ]]-$[[ inputs.platform ]] [gtkuserlist]":
+  extends:
+    - .$[[ inputs.os ]]-build
+  script:
+    - cd src/sbbs3/gtkuserlist
+    - touch depend
+    - touch xpdev
+    - touch xpdev-mt
+    - touch smblib
+    - gmake $[[ inputs.build_flags ]] $BUILD_ARGS
+  artifacts:
+    name: "gtkuserlist-$[[ inputs.os ]]-$[[ inputs.platform ]]"
+    paths:
+      - "src/sbbs3/gtkuserlist/*.exe.release/*"
+  needs:
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [xpdev]"
+    - job: "$[[ inputs.os ]]-$[[ inputs.platform ]] [smblib]"
+  rules:
+    - if: '"$[[ inputs.has_gtk ]]" == "no"'
+      when: never
+    - !reference [.rules, rules]
+
+#########
+# Tests #
+#########
 "js-testsuite [$[[ inputs.os ]]-$[[ inputs.platform ]]]":
   extends:
     - .$[[ inputs.os ]]-test
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 79343b9aa8fd5a63450b78980f3732b2eed67150..bad3460460c24b88e682f501fe80bb1bac92c6ce 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -28,7 +28,6 @@ include:
       os: 'freebsd'
       platform: 'amd64'
       tagname: 'FreeBSD'
-      build_flags: 'RELEASE=1'
   - local: '.gitlab-ci-unix.yml'
     inputs:
       os: 'mingw32'
@@ -44,15 +43,12 @@ include:
       platform: 'aarch64'
       tagname: 'RaspberryPi'
       no_javascript: 'yes'
-# NOTE: linux-sbbs builds gtkutils, so that would need to be fiddled with
-#  - local: '.gitlab-ci-unix.yml'
-#    inputs:
-#      os: "linux"
-#      platform: "x64"
-#      tagname: "Linux"
-#      cross_platform: "no"
-#      build_flags: "RELEASE=1"
-#      no_javascript: "no"
+  - local: '.gitlab-ci-unix.yml'
+    inputs:
+      os: "linux"
+      platform: "x64"
+      tagname: "Linux"
+      has_gtk: "yes"
 
 sbbs-linux:
   tags: [Linux]