darktable-org / darktable-org/lua-scripts
Lua Script GIMP doesn't waits for GIMP locks when it's previously opened
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Lua
- Star
- 219
- Fork
- 142
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
Description of the Issue
The contrib/gimp.lua script fails to open images in GIMP when an instance of GIMP is already running. The image is exported by Darktable, but GIMP displays a "No such file or directory" error, and the image is never re-imported into Darktable.
The Root Cause
Race Condition The script's logic relies on the GIMP process being blocking (waiting until the application closes) to proceed to the file cleanup/re-import phase.
Scenario A (GIMP Closed): The script works. The process blocks, user edits, closes GIMP, and the script continues.
Scenario B (GIMP Open): Modern GIMP behavior (especially GIMP 3.0 AppImages or modern 2.10 distros using DBus) defaults to "Single Instance" mode. The command sends a signal to the running instance and returns control immediately (non-blocking) to the shell.
Because of this non-blocking return, the Lua script immediately proceeds to df.file_move, moving/renaming the source file before the GIMP instance (which queues the open request as an idle job) has a chance to read it.
Verification
GIMP 3.0 (AppImage): Confirmed failure due to immediate process return.
GIMP 2.10 (Ubuntu Studio Repo): Confirmed failure on a standard, fresh install, ruling out custom environment issues.
CLI Reproduction: gimp image.jpg && mv image.jpg destination.jpg reproduces the failure in the terminal (GIMP fails to read because mv happens instantly).
The Solution According to GIMP Developer Jehan (discussed in GNOME/gimp #14827), the correct way to maintain the script's intended sequential workflow (Edit -> Wait -> Re-import) is to force a new instance.
Adding the --new-instance flag forces GIMP to spawn a new process that blocks the terminal until that specific window is closed, preventing the race condition.
Proposed Change In contrib/gimp.lua, modify the command construction:
Lua
-- Current implementation (around line 99) gimpStartCommand = gimp_executable .. " " .. img_list
-- Proposed fix
gimpStartCommand = gimp_executable .. " --new-instance " .. img_list
Result of the Fix I verified this locally. With --new-instance, the script correctly waits for the editing session to close, the file remains available for GIMP to read, and the re-import to Darktable succeeds upon closing the window.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Mở contrib/gimp.lua và kiểm tra việc xây dựng lệnh GIMP quanh dòng 99. Tái hiện workflow khi GIMP đã đang chạy, sau đó áp dụng thay đổi lệnh được đề xuất và xác minh rằng phiên chỉnh sửa chờ, tệp nguồn vẫn khả dụng và việc nhập lại vào darktable thành công sau khi đóng GIMP.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- lua
- Lĩnh vực
- desktop, tooling
- Loại issue
- Lỗi
- Độ khó
- 1/5
- Thời gian dự kiến
- Dưới một giờ
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 65/100