وقت القراءة : 8 minutes

لماذا تثبيت VS Code في`/opt`أو عبر`apt`عندما يمكنك وضعه في منزلك وتحويل IDE الخاص بك إلى ساحة لعب دون أن تكتب أبدًا`sudo`? هنا قصة تثبيت محلي تبعها صراع شرس لتكبير خطوط القائمة ومستكشف الملفات

نظرة عامة على المسار

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur as dev
actor "opencode\n+ LLM" as agent

package "Home المستخدم (~)" #LightGreen {
    package "~/apps/" {
        component "VS Code\n(tarball)" as vscode #SkyBlue
        component "vscode-update.sh" as script #LightYellow
    }
    package "~/.config/Code/" {
        component "settings.json" as settings #Lavender
    }
    package "~/.vscode-custom-css/" {
        component "custom.css\n(zoom: 1.25)" as customcss #Lavender
    }
}

cloud "code.visualstudio.com" as download

dev --> vscode : حمّل وثبّت
dev --> script : تشغيل التحديث
script --> download : الإصدار الأخير من wget
script --> vscode : استبدل + إعادة تصحيح CSS
agent --> settings : Écrit config
agent --> customcss : Écrit zoom CSS
agent --> vscode : Patch workbench CSS

note right of vscode
التثبيت في المجلد المنزلي
= تحكم كامل بدون sudo
end note
@enduml

السبب : VS Code في المنزل

المشكلة مع تثبيت النظام

تم تثبيت VS Code عبر`apt`, dnf`أو في/opt`يقفل ملفات التطبيق خلف أذونات الجذر. أي تعديل على CSS الأصلي، من`product.json`أو يتطلب مجلد التثبيت`sudo`.

لكن، عندما يستخدم أحدأوبن كود(أداة واجهة سطر أوامر لتشغيل نموذج لغوي كبير على كوده)، يحتاج الوكيل إلى القدرة على :

  • اكتب في ملفات التكوين`~/.config/Code/User/settings.json`) — هذا، هذا بالفعل في المنزل

  • عدّل أصول الـ IDE (CSS بيئة العمل,product.json) للتخصيصات المتقدمة — هذا، محظور بدون sudo

الحل: تثبيت محلي

نحمّل الأرشيف tarball الرسمي ونفكّ ضغطه مباشرةً في`~/apps/`:

mkdir -p ~/apps
cd ~/apps
wget "https://code.visualstudio.com/sha/download?build=stable&os=linux-x64" -O vscode.tar.gz
tar -xzf vscode.tar.gz
rm vscode.tar.gz

الثنائي موجود الآن في`~/apps/VSCode-linux-x64/bin/code`. لا شيء`sudo`ليس ضروريًا للقراءة أو التعديل أو استبدال أي ملف تحت`~/apps/VSCode-linux-x64/`.

المزايا الملموسة

@startuml
skinparam backgroundColor #FEFEFE

rectangle "نظام التثبيت\n(/opt, apt, dnf)" #LightCoral {
    card "VS Code خاص بالجذر" {
        [CSS du workbench : sudo requis]
        [product.json : sudo requis]
        [Dossier d'install : non modifiable]
    }
}

rectangle "تثبيت المنزل\n(~/apps)" #LightGreen {
    card "VS Code خاص بالمستخدم" {
        [CSS du workbench : libre]
        [product.json : libre]
        [Dossier d'install : libre]
        [Script update maison]
    }
}

"نظام التثبيت\n(/opt, apt, dnf)" -right-> "تثبيت المنزل\n(~/apps)" : **Non, merci**\nJe prends le home

note bottom of "تثبيت المنزل\n(~/apps)"
يمكن للوكيل opencode+LLM
تعديل ملفات IDE
بدون أي رفع للصلاحيات
end note
@enduml
ميزة تفصيل

لا sudo

جميع ملفات الـ IDE تخص المستخدم

تعديل مباشر لـ CSS

يمكننا تصحيح`workbench.desktop.main.css`بدون رفع الصلاحيات

سكريبت التحديث المنزلي

سكريبت شيل بسيط يقوم بالتحميل، الاستبدال وإعادة التصحيح تلقائيًا

عزل

تثبيت النظام ليس ملوثًا؛ التراجع = حذف المجلد

خصّص خط القائمة الرئيسية

الملاحظة

الخط الافتراضي للقائمة الرئيسية (ملف، تحرير، عرض…​) والقوائم المنسدلة صغير جداً. لا يوفّر VS Code أي إعداد لتعديلها.

التقنية : تصحيح CSS مباشر

نضيف CSS إلى نهاية الملف`workbench.desktop.main.css`( empty )

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor Développeur as dev
participant "workbench.desktop\n.main.css" as css
participant "product.json" as product
participant "VS Code" as vscode

== Patch CSS ==
dev -> css : إضافة قواعد font-size\n(.menubar-menu-title, etc.)
dev -> vscode : إعادة تشغيل VS Code
vscode -> vscode : حمِّل CSS المُصَحَّح
vscode --> dev : قوائم وقوائم منسدلة في 23px/22px ✓

== Suppression warning ==
vscode --> dev : ⚠️ "التثبيت الخاص بك تالف"
dev -> product : Supprimer clé "مجموع الفحص"\n(python3 -c ...)
dev -> vscode : إعادة تشغيل VS Code
vscode --> dev : لا مزيد من التحذير ✓

note over css, product
ملفان في /apps/ قابلان للتعديل دون الحاجة إلى sudo
end note
@enduml
CSS_FILE="$HOME/apps/VSCode-linux-x64/resources/app/out/vs/workbench/workbench.desktop.main.css"

cat >> "$CSS_FILE" << 'EOF'
.menubar-menu-title{font-size:23px!important}
.menubar>.menubar-menu-button{font-size:23px!important}
.monaco-menu-option{font-size:22px!important;line-height:34px!important}
.monaco-menu .action-label:not(.codicon){font-size:22px!important}
.menubar-menu-items-holder .monaco-menu .action-item .action-label{font-size:22px!important}
EOF

حذف تحذير النزاهة

VS Code يكتشف تعديلاته على ملفاته ويعرض شريطًا يحمل النص "Your installation is corrupt". لتجنبه، نحذف مجاميع التحقق de`product.json`:

import json
product_json = "$HOME/apps/VSCode-linux-x64/resources/app/product.json"
with open(product_json, 'r') as f:
    data = json.load(f)
data.pop('checksums', None)
with open(product_json, 'w') as f:
    json.dump(data, f, indent=2)

بعد إعادة التشغيل، لم يعد هناك تحذير وأصبحت القوائم قابلة للقراءة أخيرًا.

خصص خط جزء المستكشف — القتال

المحاولة 1: معلمة غير موجودة

نحاول أولًا المعلمة الأصلية`workbench.tree.fontSize`في`settings.json`:

{
    "workbench.tree.fontSize": 20
}

النتيجة :لا تأثير. هذا الإعداد غير موجود في VS Code. الدليل على أن الإعدادات غير المعترف بها تُتجاهل بصمت.

محاولة 2: الامتداد Custom CSS and JS Loader

نُثبّت الإضافة`be5invis.vscode-custom-css`:

~/apps/VSCode-linux-x64/bin/code --install-extension be5invis.vscode-custom-css

نقوم بإنشاء ملف CSS في`~/.vscode-custom-css/custom.css`مع محددات تستهدف عناصر المستكشف :

.monaco-tree-rows .monaco-tree-row,
.sidebar .monaco-list-row,
.explorer-viewlet .monaco-list-row,
.monaco-list-row .monaco-icon-label {
    font-size: 22px !important;
    line-height: 36px !important;
}

ونشير إلى هذا الملف في الإعدادات :

{
    "vscode_custom_css.imports": [
        "file:///home/user/.vscode-custom-css/custom.css"
    ]
}

النتيجة :التغييرات لا تُطبق.

الفخ: يجب تفعيل الإضافة في كل مرة

وثائق الإضافة صامتة حول هذه النقطة الحاسمة: بعد كل تعديل على CSS المخصص، يجب أنضروريًانفذ الأمر من اللوحة:

  1. Ctrl+Shift+P→ يكتبتمكين CSS و JS مخصص

  2. VS Code يطلب إعادة التشغيل → قبول

بدون هذه الخطوة، لا يتم حقن CSS أبدًا في بيئة التطوير المتكاملة.

المحاولة 3 : الخطوط تتداخل

حتى مع`font-size: 22px` et line-height: 36px, الحروف ذات الساق (g, p, f, b) تتدفق على الخطوط المجاورة. نحاول إضافة`height` et min-height(No output, as the text to translate is empty)

.monaco-list-row {
    height: 36px !important;
    min-height: 36px !important;
}

النتيجة :لا تغييرVS Code يحسب ارتفاعات الأسطر في JavaScript ويتجاوز قيم CSS.

الحل : zoom على الحاوية الأصلية

@startuml
skinparam backgroundColor #FEFEFE

rectangle "محاولة 1\nParamère غير موجود" #LightCoral {
    card "workbench.tree.fontSize" as t1 {
        [VS Code ignore le paramètre]
    }
}

rectangle "محاولة 2nCustom CSS + حجم الخط" #LightYellow {
    card ".monaco-list-row { font-size: 22px }" as t2 {
        [Texte plus grand\nmais lignes superposées]
    }
}

rectangle "المحاولة الثالثة\nfont-size + line-height + height" #LightYellow {
    card "الارتفاع: 36px !important" as t3 {
        [VS Code override\npar JavaScript]
        [Aucun effet]
    }
}

rectangle "الحل\nتكبير على الحاوية الأم" #LightGreen {
    card ".monaco-list-rows { zoom: 1.25 }" as t4 {
        [Texte + espacement\nproportionnels]
        [Layout JS respecté]
        [✓ Résultat conforme]
    }
}

t1 -down-> t2 : لا معلمة؟nOn يحاول CSS
t2 -down-> t3 : الخطوط المتداخلة؟\nOn تفرض الارتفاع
t3 -down-> t4 : تجاوز جافا سكريبت؟ nOn يستخدم تكبير

@enduml

بدلاً من محاربة تخطيط JavaScript، نستخدم الخاصية`zoom`على حاوية الأسطر:

.explorer-viewlet .monaco-list-rows,
.sidebar .monaco-list-rows {
    zoom: 1.25;
}

`zoom`يتوسّع عرض الحاوية بشكل موحد — النص والمسافة — دون إتلاف التخطيط الذي يحسبه محرك JavaScript في VS Code. العامل 1.25 يقارب تقريباً الانتقال من 13px إلى 16px.

النتيجة:أصبحت أسماء الملفات قابلة للقراءة الآن، والخطوط متباعدة بشكل صحيح.

ملخص المحددات وما يعمل

النهج CSS النتيجة

font-size`على.monaco-list-row`

font-size: 22px !important

نص أكبر لكن الخطوط متداخلة

line-height+height`على.monaco-list-row`

line-height: 36px; height: 36px

لا تأثير (override JS)

zoom`على.monaco-list-rows`

zoom: 1.25

ناجح — النص + التباعد المتناسب

سكريبت التحديث التلقائي

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor "مطور\nأو cron" as dev
participant "vscode-update.sh" as script
participant "vscode tarball\n(code.visualstudio.com)" as remote
participant "~/apps/\nVSCode-linux-x64/" as local
participant "~/apps/\nvscode-backup/" as backup
participant "workbench\n.desktop.main.css" as css
participant "product.json" as product

dev -> script : ./vscode-update.sh
script -> local : اقرأ النسخة الحالية
script -> remote : wget أحدث نسخة
script -> script : مقارنة الإصدارات

alt Version identique
    script --> dev : "محدَّث بالفعل!"
else Nouvelle version
    script -> backup : حفظ التثبيت الحالي\n(horodatée)
    script -> local : rm -rf التثبيت القديم
    script -> local : mv التثبيت الجديد
    script -> css : إضافة التصحيح CSS\n(menubar 23px, dropdown 22px)
    script -> product : احذف checksums\n(python3)
    script --> dev : "تحديث مكتملn1.xx.yy → 1.zz.ww"
end note
@enduml

المشكلة

عند تحديث VS Code، يحل محل مجلد التثبيت واحذف جميع تصحيحات CSS. يجب إعادة تطبيق التعديلات يدويًا في كل مرة.

السكريبت `vscode-update.sh

نُنشئ`~/apps/vscode-update.sh`(No output, as the text to translate is empty)

#!/bin/bash
set -e

VSCODE_DIR="$HOME/apps/VSCode-linux-x64"
BACKUP_DIR="$HOME/apps/vscode-backup"
TEMP_DIR="/tmp/vscode-update"

MENUBAR_FONT_SIZE="23px"
DROPDOWN_FONT_SIZE="22px"

echo "=== VS Code Local Updater ==="

CURRENT_VERSION=$("$VSCODE_DIR/bin/code" --version 2>/dev/null | head -1)
echo "Current version: $CURRENT_VERSION"

echo "Downloading latest VS Code..."
mkdir -p "$TEMP_DIR"
wget -q "https://code.visualstudio.com/sha/download?build=stable&os=linux-x64" \
    -O "$TEMP_DIR/vscode.tar.gz"

echo "Extracting..."
mkdir -p "$TEMP_DIR/extracted"
tar -xzf "$TEMP_DIR/vscode.tar.gz" -C "$TEMP_DIR/extracted"

NEW_VERSION=$("$TEMP_DIR/extracted/VSCode-linux-x64/bin/code" \
    --version 2>/dev/null | head -1)
echo "New version: $NEW_VERSION"

if [ "$CURRENT_VERSION" = "$NEW_VERSION" ]; then
    echo "Already up to date!"
    rm -rf "$TEMP_DIR"
    exit 0
fi

echo "Backing up current installation..."
mkdir -p "$BACKUP_DIR"
cp -r "$VSCODE_DIR" "$BACKUP_DIR/VSCode-linux-x64-$(date +%Y%m%d-%H%M%S)"

echo "Updating..."
rm -rf "$VSCODE_DIR"
mv "$TEMP_DIR/extracted/VSCode-linux-x64" "$VSCODE_DIR"
rm -rf "$TEMP_DIR"

CSS_FILE="$VSCODE_DIR/resources/app/out/vs/workbench/workbench.desktop.main.css"
echo "Re-applying custom CSS patch \
    (menubar=${MENUBAR_FONT_SIZE}, dropdown=${DROPDOWN_FONT_SIZE})..."
cat >> "$CSS_FILE" << CSSEOF
.menubar-menu-title{font-size:${MENUBAR_FONT_SIZE}!important}\
.menubar>.menubar-menu-button{font-size:${MENUBAR_FONT_SIZE}!important}\
.monaco-menu-option{font-size:${DROPDOWN_FONT_SIZE}!important;\
line-height:34px!important}\
.monaco-menu .action-label:not(.codicon)\
{font-size:${DROPDOWN_FONT_SIZE}!important}\
.menubar-menu-items-holder .monaco-menu .action-item .action-label\
{font-size:${DROPDOWN_FONT_SIZE}!important}
CSSEOF

PRODUCT_JSON="$VSCODE_DIR/resources/app/product.json"
if [ -f "$PRODUCT_JSON" ]; then
    echo "Removing checksums to prevent integrity warning..."
    python3 -c "
import json
with open('$PRODUCT_JSON','r') as f: data=json.load(f)
data.pop('checksums', None)
with open('$PRODUCT_JSON','w') as f: json.dump(data,f,indent=2)
print('Done.')
"
fi

echo "=== Update complete: $CURRENT_VERSION -> $NEW_VERSION ==="

سكريبت :

  1. نزّل الإصدار المستقر الأحدث

  2. تحقق مما إذا كان الإصدار يختلف عن الحالي

  3. احفظ التثبيت الحالي (مؤرّخ بوقت) في`~/apps/vscode-backup/`

  4. استبدل مجلد التثبيت

  5. أعد التطبيقتصحيح CSS للقائمة الرئيسية

  6. احذف مجموعيات التحقق de `product.json`لتجنب تحذير النزاهة

التخصيصات لجزء المستكشف عبر إضافة Custom CSS والملف`~/.vscode-custom-css/custom.css`ينجون من التحديثات لأنهم يعيشون خارج مجلد التثبيت

الملفات المتورطة — نظرة عامة

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle "تثبيت VS Code\n(~/apps/VSCode-linux-x64/)" #LightCoral {
    component "workbench.desktop\n.main.css" as css #LightCoral
    component "product.json" as product #LightCoral
    component "ثنائي\nbin/code" as binary #LightCoral
}

rectangle "التكوين المستخدم\n(~/.config/Code/)" #LightGreen {
    component "settings.json" as settings #LightGreen
    component "امتدادات/" as extensions #LightGreen
}

rectangle "تخصيص مستمر\n(~/.vscode-custom-css/)" #SkyBlue {
    component "custom.css\n(zoom: 1.25)" as customcss #SkyBlue
}

rectangle "أتمتة\n(~/apps/)" #LightYellow {
    component "vscode-update.sh" as script #LightYellow
    component "vscode-backup/" as backup #LightYellow
}

script ..> css : إعادة التصحيح بعد MAJ
script ..> product : احذف checksums\nبعد MAJ
settings --> customcss : مرجع عبر\nvscode_custom_css.imports
extensions ..> css : مخصص CSS محمل\nحقن custom.css

note bottom of css
لا يبقى على قيد الحياة
تم إعادة تصحيحه بواسطة السكريبت
end note

note bottom of customcss
ينجو من التحديثات
يعيش خارج مجلد التثبيت
end note

note bottom of settings
Survit** للتحديثات
يعيش في ~/.config/
end note
@enduml
طريق دور هل يبقى على قيد الحياة بعد التحديثات؟

~/apps/VSCode-linux-x64/

تثبيت بيئة التطوير المتكاملة

لا (مستبدلة)

~/apps/VSCode-linux-x64/resources/app/out/vs/workbench/workbench.desktop.main.css

CSS من منصة العمل (القوائم، القوائم المنسدلة)

لا (تم إعادة تصحيحه من قبل النص)

~/apps/VSCode-linux-x64/resources/app/product.json

مجموع التحقق من التكامل

لا (تم إعادة تنظيفه بواسطة البرنامج)

~/apps/vscode-update.sh

سكريبت التحديث التلقائي

نعم

~/.config/Code/User/settings.json

إعدادات المستخدم (fontSize, CSS مخصص)

نعم

~/.vscode-custom-css/custom.css

CSS مخصص لـ Explorer (تكبير)

نعم

الدروس المستفادة

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam ArrowColor #444444

rectangle "**التثبيت المحلي**\n في المنزل" as install #LightGreen {
    card "لا sudo\n لتعديل CSS/config" as i1
    card "opencode+LLM يمكنه\n تعديل كل شيء" as i2
    card "Rollback = استعادة\n النسخ الاحتياطية المؤرّخة" as i3
}

rectangle "تخصيص CSS\nالتكبير مقابل حجم الخط" as css #LightYellow {
    card "التكبير > حجم الخط\nللمكونات القائمة" as c1
    card "تصميم JS الإلغاء\nارتفاع/line-height" as c2
    card "Extension Custom CSS\n يتطلب تفعيل\n يدويًا (Ctrl+Shift+P)" as c3
}

rectangle "الأتمتة\nسكريبت التحديث" as auto #LightCoral {
    card "إعادة تصحيح CSS بعد\n كل MAJ" as a1
    card "احذف checksums\nproduct.json" as a2
    card "نسخة احتياطية ذات طابع زمني\nقبل الاستبدال" as a3
}

install -right-> css : ثم
css -right-> auto : أخيرًا

note top of install
السيطرة الكاملة دون رفع الصلاحيات
end note

note top of auto
بدون سكريبت، كل MAJ
يمسح التصحيحات CSS
end note
@enduml

التثبيت في المنزل يحرر كل شيء

تثبيت محلي في`~/apps`يمنح تحكمًا كاملاً على VS Code :

  • لا`sudo`لتعديل CSS أو الإعداد

  • يمكن للوكيل opencode+LLM الكتابة في ملفات الإعداد وأصول بيئة التطوير المتكاملة

  • تراجع بسيط : استعادة النسخة الاحتياطية الموقوتة

zoom` > font-size للمكونات القائمة

VS Code يتحكم في ارتفاع الأسطر عبر JavaScript. عدّل`font-size`بدون القدرة على لمس الارتفاع المخصص من قبل محرك التخطيط يؤدي إلى نصوص تتجاوز الحدود. الخاصية`zoom`على الحاوية الأم، يتم تكبير كل شيء بشكل متناسب ويتجنب هذه المشكلة.

امتداد Custom CSS يتطلب تفعيلًا صريحًا

هذا ليس معلمة "set and forget". كل تعديل على ملف CSS المخصص يتطلب إعادة تنفيذ "Enable Custom CSS and JS" من لوحة الأوامر (Ctrl+Shift+P).

سكريبت التحديث ضروري

بدون نص برمجي، كل تحديث لـ VS Code يمسح تصحيحات CSS الخاصة بـ Workbench. النص البرمجي`vscode-update.sh`يعمل على أتمتة التنزيل، والاستبدال، وإعادة التصحيح، وتنظيف مجاميع التحقق.

مراجع سريعة

  • تنزيل VS Code : https://code.visualstudio.com/Download

  • ملحق محمل CSS و JS مخصص :`be5invis.vscode-custom-css`

  • مشكلة VS Code تطلب إعدادًا أصليًا لخط المستكشف :https://github.com/microsoft/vscode/issues/149[github.com/microsoft/vscode#149]

مقالات ذات صلة