Skip to content

VNC in browser shows black screen after a while #211

@eygraber

Description

@eygraber

I recently updated from a older version of the image (~September 2023) and now after a few hours of running, the VNC window in the browser is black. I can see a cursor on the screen, but that is it. Restarting the container fixes the problem temporarily.

services:
  backblaze_personal_backup:
    image: tessypowder/backblaze-personal-wine:latest
    init: true
    ports:
      - 5800:5800
    volumes:
      ...
    restart: always
    environment:
      - GROUP_ID=1001
      - TZ=America/New_York

Startup logs (followed by logs I grabbed earlier today when I noticed the issue):

backblaze_personal_backup-1  | [init        ] container is starting...
backblaze_personal_backup-1  | [cont-env    ] loading container environment variables...
backblaze_personal_backup-1  | [cont-env    ] APP_NAME: loading...
backblaze_personal_backup-1  | [cont-env    ] DISPLAY: executing...
backblaze_personal_backup-1  | [cont-env    ] DISPLAY: terminated successfully.
backblaze_personal_backup-1  | [cont-env    ] DISPLAY: loading...
backblaze_personal_backup-1  | [cont-env    ] DOCKER_IMAGE_PLATFORM: loading...
backblaze_personal_backup-1  | [cont-env    ] GTK2_RC_FILES: executing...
backblaze_personal_backup-1  | [cont-env    ] GTK2_RC_FILES: terminated successfully.
backblaze_personal_backup-1  | [cont-env    ] GTK2_RC_FILES: loading...
backblaze_personal_backup-1  | [cont-env    ] GTK_THEME: executing...
backblaze_personal_backup-1  | [cont-env    ] GTK_THEME: terminated successfully.
backblaze_personal_backup-1  | [cont-env    ] GTK_THEME: loading...
backblaze_personal_backup-1  | [cont-env    ] HOME: loading...
backblaze_personal_backup-1  | [cont-env    ] QT_STYLE_OVERRIDE: executing...
backblaze_personal_backup-1  | [cont-env    ] QT_STYLE_OVERRIDE: terminated successfully.
backblaze_personal_backup-1  | [cont-env    ] QT_STYLE_OVERRIDE: loading...
backblaze_personal_backup-1  | [cont-env    ] TAKE_CONFIG_OWNERSHIP: loading...
backblaze_personal_backup-1  | [cont-env    ] XDG_CACHE_HOME: loading...
backblaze_personal_backup-1  | [cont-env    ] XDG_CONFIG_HOME: loading...
backblaze_personal_backup-1  | [cont-env    ] XDG_DATA_HOME: loading...
backblaze_personal_backup-1  | [cont-env    ] XDG_RUNTIME_DIR: loading...
backblaze_personal_backup-1  | [cont-env    ] XDG_STATE_HOME: loading...
backblaze_personal_backup-1  | [cont-env    ] container environment variables initialized.
backblaze_personal_backup-1  | [cont-secrets] loading container secrets...
backblaze_personal_backup-1  | [cont-secrets] container secrets loaded.
backblaze_personal_backup-1  | [cont-init   ] executing container initialization scripts...
backblaze_personal_backup-1  | [cont-init   ] 10-certs.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-certs.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-check-app-niceness.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-check-app-niceness.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-clean-logmonitor-states.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-clean-logmonitor-states.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-clean-tmp-dir.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-clean-tmp-dir.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-fontconfig-cache-dir.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-fontconfig-cache-dir.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-init-users.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-init-users.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-nginx.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-nginx.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-openbox.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-openbox.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-pkgs-mirror.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-pkgs-mirror.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-set-tmp-dir-perms.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-set-tmp-dir-perms.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-vnc-password.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-vnc-password.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-web-data.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-web-data.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-x11-unix.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-x11-unix.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 10-xdg-runtime-dir.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 10-xdg-runtime-dir.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 15-cjk-font.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 15-cjk-font.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 15-install-pkgs.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 15-install-pkgs.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 85-take-config-ownership.sh: executing...
backblaze_personal_backup-1  | [cont-init   ] 85-take-config-ownership.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] 89-info.sh: executing...
backblaze_personal_backup-1  |     ╭――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╮
backblaze_personal_backup-1  |     │                                                                      │
backblaze_personal_backup-1  |     │ Application:           Backblaze Personal Backup                     │
backblaze_personal_backup-1  |     │ Application Version:   n/a                                           │
backblaze_personal_backup-1  |     │ Docker Image Version:  n/a                                           │
backblaze_personal_backup-1  |     │ Docker Image Platform: linux/amd64                                   │
backblaze_personal_backup-1  |     │                                                                      │
backblaze_personal_backup-1  |     ╰――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╯
backblaze_personal_backup-1  | [cont-init   ] 89-info.sh: terminated successfully.
backblaze_personal_backup-1  | [cont-init   ] all container initialization scripts executed.
backblaze_personal_backup-1  | [init        ] giving control to process supervisor.
backblaze_personal_backup-1  | [supervisor  ] loading services...
backblaze_personal_backup-1  | [supervisor  ] loading service 'default'...
backblaze_personal_backup-1  | [supervisor  ] loading service 'logmonitor'...
backblaze_personal_backup-1  | [supervisor  ] service 'logmonitor' is disabled.
backblaze_personal_backup-1  | [supervisor  ] loading service 'app'...
backblaze_personal_backup-1  | [supervisor  ] loading service 'gui'...
backblaze_personal_backup-1  | [supervisor  ] loading service 'xvnc'...
backblaze_personal_backup-1  | [supervisor  ] loading service 'openbox'...
backblaze_personal_backup-1  | [supervisor  ] loading service 'nginx'...
backblaze_personal_backup-1  | [supervisor  ] loading service 'certsmonitor'...
backblaze_personal_backup-1  | [supervisor  ] service 'certsmonitor' is disabled.
backblaze_personal_backup-1  | [supervisor  ] loading service 'logrotate'...
backblaze_personal_backup-1  | [supervisor  ] all services loaded.
backblaze_personal_backup-1  | [supervisor  ] starting services...
backblaze_personal_backup-1  | [supervisor  ] starting service 'xvnc'...
backblaze_personal_backup-1  | [xvnc        ] Xvnc TigerVNC 1.13.1 - built Dec 21 2023 00:39:30
backblaze_personal_backup-1  | [xvnc        ] Copyright (C) 1999-2022 TigerVNC Team and many others (see README.rst)
backblaze_personal_backup-1  | [xvnc        ] See https://www.tigervnc.org for information on TigerVNC.
backblaze_personal_backup-1  | [xvnc        ] Underlying X server release 12014000
backblaze_personal_backup-1  | [xvnc        ] Mon Aug 18 10:31:23 2025
backblaze_personal_backup-1  | [xvnc        ]  vncext:      VNC extension running!
backblaze_personal_backup-1  | [xvnc        ]  vncext:      Listening for VNC connections on /tmp/vnc.sock (mode 0660)
backblaze_personal_backup-1  | [xvnc        ]  vncext:      Listening for VNC connections on all interface(s), port 5900
backblaze_personal_backup-1  | [xvnc        ]  vncext:      created VNC server for screen 0
backblaze_personal_backup-1  | [supervisor  ] starting service 'openbox'...
backblaze_personal_backup-1  | [supervisor  ] starting service 'nginx'...
backblaze_personal_backup-1  | [nginx       ] Listening for HTTP connections on port 5800.
backblaze_personal_backup-1  | [supervisor  ] starting service 'app'...
backblaze_personal_backup-1  | [app         ] + local_version_file=/config/wine/dosdevices/c:/ProgramData/Backblaze/bzdata/bzreports/bzserv_version.txt
backblaze_personal_backup-1  | [app         ] + install_exe_path=/config/wine/dosdevices/c:/
backblaze_personal_backup-1  | [app         ] + log_file=/config/wine/dosdevices/c:/backblaze-wine-startapp.log
backblaze_personal_backup-1  | [app         ] + custom_user_agent='backblaze-personal-wine (JonathanTreffler, +https://github.com/JonathanTreffler/backblaze-personal-wine-container), CFNetwork'
backblaze_personal_backup-1  | [app         ] + pinned_bz_version_file=/PINNED_BZ_VERSION
backblaze_personal_backup-1  | [app         ] ++ sed -n 1p /PINNED_BZ_VERSION
backblaze_personal_backup-1  | [app         ] + pinned_bz_version=9.0.1.777
backblaze_personal_backup-1  | [app         ] ++ sed -n 2p /PINNED_BZ_VERSION
backblaze_personal_backup-1  | [app         ] + pinned_bz_version_url=https://web.archive.org/web/20240602102732/https://secure.backblaze.com/win32/install_backblaze.exe
backblaze_personal_backup-1  | [app         ] + export FORCE_LATEST_UPDATE=true
backblaze_personal_backup-1  | [app         ] + FORCE_LATEST_UPDATE=true
backblaze_personal_backup-1  | [app         ] + export WINEARCH=win64
backblaze_personal_backup-1  | [app         ] + WINEARCH=win64
backblaze_personal_backup-1  | [app         ] + export WINEDLLOVERRIDES=mscoree=
backblaze_personal_backup-1  | [app         ] + WINEDLLOVERRIDES=mscoree=
backblaze_personal_backup-1  | [app         ] + '[' '!' -f /config/wine/system.reg ']'
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_d
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_e
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_f
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_g
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_h
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_i
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_j
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_k
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_l
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_m
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_n
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_o
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_p
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_q
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_r
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_s
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_t
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_u
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_v
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_w
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_x
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_y
backblaze_personal_backup-1  | [app         ] + for x in {d..z}
backblaze_personal_backup-1  | [app         ] + test -d /drive_z
backblaze_personal_backup-1  | [app         ] + cd /config/wine/
backblaze_personal_backup-1  | [app         ] + '[' false = true ']'
backblaze_personal_backup-1  | [app         ] + '[' -n 900 ']'
backblaze_personal_backup-1  | [app         ] + '[' -n 700 ']'
backblaze_personal_backup-1  | [app         ] + log_message 'WINE: Enabling Virtual Desktop mode with 900:900 aspect ratio'
backblaze_personal_backup-1  | [app         ] ++ date
backblaze_personal_backup-1  | [app         ] + echo 'Mon Aug 18 10:31:24 AM EDT 2025: WINE: Enabling Virtual Desktop mode with 900:900 aspect ratio'
backblaze_personal_backup-1  | [app         ] + winetricks vd=900x700
backblaze_personal_backup-1  | [app         ] Executing mkdir -p /config
backblaze_personal_backup-1  | [supervisor  ] all services started.
backblaze_personal_backup-1  | [app         ] ------------------------------------------------------
backblaze_personal_backup-1  | [app         ] warning: You are using a 64-bit WINEPREFIX. Note that many verbs only install 32-bit versions of packages. If you encounter problems, please retest in a clean 32-bit WINEPREFIX before reporting a bug.
backblaze_personal_backup-1  | [app         ] ------------------------------------------------------
backblaze_personal_backup-1  | [app         ] Using winetricks 20210206 - sha256sum: 0f21da98811e0bfda16a7d6d6b8e860a9cedbd4e836c7dd9b02f068d3092ee2e with wine-10.0 and WINEARCH=win64
backblaze_personal_backup-1  | [app         ] Executing wine regedit C:\windows\Temp/vd.reg
backblaze_personal_backup-1  | [app         ] Executing wine64 regedit C:\windows\Temp/vd.reg
backblaze_personal_backup-1  | [app         ] + '[' true = true ']'
backblaze_personal_backup-1  | [app         ] + echo 'Auto-updates are disabled. Backblaze won'\''t be updated.'
backblaze_personal_backup-1  | [app         ] Auto-updates are disabled. Backblaze won't be updated.
backblaze_personal_backup-1  | [app         ] + '[' -f '/config/wine/drive_c/Program Files (x86)/Backblaze/bzbui.exe' ']'
backblaze_personal_backup-1  | [app         ] + '[' true = true ']'
backblaze_personal_backup-1  | [app         ] + log_message 'UPDATER: DISABLE_AUTOUPDATE=true, Auto-updates are disabled. Starting Backblaze without updating.'
backblaze_personal_backup-1  | [app         ] ++ date
backblaze_personal_backup-1  | [app         ] + echo 'Mon Aug 18 10:31:26 AM EDT 2025: UPDATER: DISABLE_AUTOUPDATE=true, Auto-updates are disabled. Starting Backblaze without updating.'
backblaze_personal_backup-1  | [app         ] + start_app
backblaze_personal_backup-1  | [app         ] ++ cat /config/wine/dosdevices/c:/ProgramData/Backblaze/bzdata/bzreports/bzserv_version.txt
backblaze_personal_backup-1  | [app         ] + log_message 'STARTAPP: Starting Backblaze version 9.0.1.767'
backblaze_personal_backup-1  | [app         ] ++ date
backblaze_personal_backup-1  | [app         ] + echo 'Mon Aug 18 10:31:26 AM EDT 2025: STARTAPP: Starting Backblaze version 9.0.1.767'
backblaze_personal_backup-1  | [app         ] + sleep infinity
backblaze_personal_backup-1  | [app         ] + wine64 '/config/wine/drive_c/Program Files (x86)/Backblaze/bzbui.exe' -noquiet
backblaze_personal_backup-1  | [xvnc        ] Mon Aug 18 10:35:03 2025
backblaze_personal_backup-1  | [xvnc        ]  Connections: accepted: /tmp/vnc.sock
backblaze_personal_backup-1  | [xvnc        ]  SConnection: Client needs protocol version 3.8
backblaze_personal_backup-1  | [xvnc        ]  SConnection: Client requests security type None(1)
backblaze_personal_backup-1  | [xvnc        ]  VNCSConnST:  Server default pixel format depth 24 (32bpp) little-endian rgb888
backblaze_personal_backup-1  | [xvnc        ]  VNCSConnST:  Client pixel format depth 24 (32bpp) little-endian bgr888
backblaze_personal_backup-1  | [xvnc        ]  ComparingUpdateTracker: 0 pixels in / 0 pixels out
backblaze_personal_backup-1  | [xvnc        ]  ComparingUpdateTracker: (1:-nan ratio)

Here's the logs I grabbed earlier today from when I noticed the issue:

backblaze_personal_backup-1  | [xvnc        ] Mon Aug 18 06:28:27 2025
backblaze_personal_backup-1  | [xvnc        ]  VNCSConnST:  closing /tmp/vnc.sock: Clean disconnection
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager: Framebuffer updates: 66979
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:   Tight:
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:     Solid: 4.473 krects, 6.06241 Mpixels
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:            69.8906 KiB (1:339.583 ratio)
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:     Bitmap RLE: 23.735 krects, 18.2573 Mpixels
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:                 772.463 KiB (1:92.6849 ratio)
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:     Indexed RLE: 56.78 krects, 9.03037 Mpixels
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:                  6.6203 MiB (1:5.30157 ratio)
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:   Tight (JPEG):
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:     Full Colour: 182.918 krects, 274.41 Mpixels
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:                  290.889 MiB (1:3.60579 ratio)
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:   Total: 267.906 krects, 307.76 Mpixels
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:          298.332 MiB (1:3.94553 ratio)
backblaze_personal_backup-1  | [xvnc        ]  Connections: closed: /tmp/vnc.sock
backblaze_personal_backup-1  | [xvnc        ]  ComparingUpdateTracker: 11.4224 Gpixels in / 168.828 Mpixels out
backblaze_personal_backup-1  | [xvnc        ]  ComparingUpdateTracker: (1:67.6568 ratio)
backblaze_personal_backup-1  | [xvnc        ] Mon Aug 18 10:24:51 2025
backblaze_personal_backup-1  | [xvnc        ]  Connections: accepted: /tmp/vnc.sock
backblaze_personal_backup-1  | [xvnc        ]  SConnection: Client needs protocol version 3.8
backblaze_personal_backup-1  | [xvnc        ]  SConnection: Client requests security type None(1)
backblaze_personal_backup-1  | [xvnc        ]  VNCSConnST:  Server default pixel format depth 24 (32bpp) little-endian rgb888
backblaze_personal_backup-1  | [xvnc        ]  VNCSConnST:  Client pixel format depth 24 (32bpp) little-endian bgr888
backblaze_personal_backup-1  | [xvnc        ] Mon Aug 18 10:24:54 2025
backblaze_personal_backup-1  | [xvnc        ]  VNCSConnST:  closing /tmp/vnc.sock: Clean disconnection
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager: Framebuffer updates: 3
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:   Tight:
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:     Solid: 4 rects, 1.72422 Mpixels
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:            64 B (1:107764 ratio)
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:     Bitmap RLE: 1 rects, 150 pixels
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:                 66 B (1:9.27273 ratio)
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:   Total: 5 rects, 1.72437 Mpixels
backblaze_personal_backup-1  | [xvnc        ]  EncodeManager:          130 B (1:53058 ratio)
backblaze_personal_backup-1  | [xvnc        ]  Connections: closed: /tmp/vnc.sock
backblaze_personal_backup-1  | [xvnc        ]  ComparingUpdateTracker: 0 pixels in / 0 pixels out
backblaze_personal_backup-1  | [xvnc        ]  ComparingUpdateTracker: (1:-nan ratio)
backblaze_personal_backup-1  | [xvnc        ] Mon Aug 18 10:24:55 2025
backblaze_personal_backup-1  | [xvnc        ]  Connections: accepted: /tmp/vnc.sock
backblaze_personal_backup-1  | [xvnc        ]  SConnection: Client needs protocol version 3.8
backblaze_personal_backup-1  | [xvnc        ]  SConnection: Client requests security type None(1)
backblaze_personal_backup-1  | [xvnc        ]  VNCSConnST:  Server default pixel format depth 24 (32bpp) little-endian rgb888
backblaze_personal_backup-1  | [xvnc        ]  VNCSConnST:  Client pixel format depth 24 (32bpp) little-endian bgr888

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions