انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: نحوه اضافه کردن ایندیکیتور لایوت کیبرد به i3statusbar (حل شد)  (دفعات بازدید: 5766 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین بهروز رمضانی

  • High Hero Member
  • *
  • ارسال: 1111
  • جنسیت : پسر
  • Kakashi Hatake
    • ابونتو نیوز
سلام به همگی
من یه چند روزی هست اومدم روی i3 مشکلاتی دارم اما هنوز موفق نشدم ایندیکیتور لاوت کیبرد را به i3statusbar اضافه کنم. یکم سرچ کردم به صفحه زیر رسیدم. بعد از اعمال تغییرات لازم علاوه بر این که رنگ بندی آیتمها روی i3statubar به رنگ سفید در اومد.به علاوه خروجی اسکریپت گفته شده در اون صفحه نمایش هر دو زبان eng,ir با هم بود. در صورتی که باید زبان جاری را نشان بده.
http://docs.slackware.com/howtos:window_managers:keyboard_layout_in_i3
این اسکریپت هم یکی از بچه‌های انجمن ارچ معرفی کرد. که متاسفانه خروجیش اونی نیست که من میخوام.در ضمن بگم لپتاپ من چراغ CapsLK و امثالهم نداره.
#This is a script for changing keyboard between English and Persian layouts

if [ `setxkbmap -print | grep xkb_symbols | awk '{print $4}' | awk -F"+" '{print $2}'` = us ];

then echo "EN"; echo "changing to IR..."; setxkbmap ir;

else echo "IR"; echo "Changing to US..."; setxkbmap us ;

fi
« آخرین ویرایش: 25 بهمن 1394، 10:31 ب‌ظ توسط بهروز رمضانی »
در یادگیری و استفاده از خط فرمان کوشا باشید چرا که رستگاری شما در آن است.

آفلاین 藤沼

  • Sr. Member
  • *
  • ارسال: 414
  • جنسیت : پسر
https://github.com/szemate/config/blob/master/i3status-extender
$XDG_CONFIG_HOME/i3/config:

bar {
    status_command i3status | i3-extender
}

آفلاین بهروز رمضانی

  • High Hero Member
  • *
  • ارسال: 1111
  • جنسیت : پسر
  • Kakashi Hatake
    • ابونتو نیوز
https://github.com/szemate/config/blob/master/i3status-extender
$XDG_CONFIG_HOME/i3/config:

bar {
    status_command i3status | i3-extender
}
من اون اسکریپت را داخل یه فایل ریختم و أدرس اش را این طور تعریف کردم.
status_command i3status | ~/.i3/i3-extender
خوب بعد از راه‌اندازی مجدد i3 ایندیکیتور کیبرد ظاهر شده اما با تغییر زبان تغییر نمیکنه.
« آخرین ویرایش: 24 بهمن 1394، 07:51 ب‌ظ توسط بهروز رمضانی »
در یادگیری و استفاده از خط فرمان کوشا باشید چرا که رستگاری شما در آن است.

آفلاین 藤沼

  • Sr. Member
  • *
  • ارسال: 414
  • جنسیت : پسر
چرا؟
وقتی از دستور زیر برای تغییر طرح‌بندی کیبورد استفاده بشه:
setxkbmap -option grp:switch,grp:alt_shift_toggle us,ir
در اصل دو طرح‌بندی تعریف و بوسیلهٔ Alt+Shift بین اون‌ها تعویض انجام می‌شه:
rules:      evdev
model:      pc105
layout:     us,ir
options:    grp:switch,grp:alt_shift_toggle

اسکریپت پایتونی که من به شما معرفی کردم هم با موشکافی خروجی دستور setxkbmap -query طرح‌بندی حاضر رو بدست میاره بنابراین اگر خروجی طبق بالا باشه فقط اولین طرح‌بندی با عبارت Regex برابر می‌شه.

چطور:
برای تعویض طرح‌بندی‌های کیبورد از اسکریپت زیر استفاده کنید:
#!/usr/bin/env bash
# filename: xkblayout.sh

layout=$(setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}')

if [ "$layout" = us ]; then
    setxkbmap ir
else
    setxkbmap us
fi

پیکربندی i3:
bindcode Shift+64   exec ~/xkblayout.sh # Shift+Alt
bindcode Mod1+50    exec ~/xkblayout.sh # Alt+Shift_L
bindcode Mod1+62    exec ~/xkblayout.sh # Alt+Shift_R


منابع:
https://faq.i3wm.org/question/3953/execute-an-sh-file-using-bindsym.1.html
http://unix.stackexchange.com/a/48858
« آخرین ویرایش: 25 بهمن 1394، 09:01 ب‌ظ توسط b|ackwolf »

آفلاین محمد فدوی

  • Sr. Member
  • *
  • ارسال: 485
  • جنسیت : پسر
  • آغاز آزادی از رایانهٔ شخصی
    • آغاز آزادی از رایانهٔ شخصی
برای چک کردن زبان فعلی صفحه‌کلید دستور اشتباهی رو توی if چک کردید.. حداقل برای من که همیشه us رو نمایش می‌ده (حتی اگه روی فارسی باشه).
در واقع راه بدون ایرادی وجود نداره ولی اگه به جاش دستور زیر رو بررسی کنید برای وقتی که فقط دوتا زبان رو استفاده می‌کنید مشکلی پیش نمی‌آد:
کد: (bash) [انتخاب]
$ xset -q|grep LED| awk '{ print $10 }'برای من وقتی که زبان فارسی باشه خروجی 0000106 و وقتی زبان انگلیسی باشه خروجی 00000002 هست احتمالا توی سیستم شما هم همین خروجی‌ها باشن.

اگه مایل بودید می‌تونید از این اسکریپت ساده هم استفاده کنید:
کد: (active-layout.sh) [انتخاب]
#!/bin/bash

case `xset -q|grep LED| awk '{ print $10 }'` in
    "00000002") kb='English' ;;
    "00001006") kb='Persian' ;;
    *) kb='Unknown' ;;
esac

echo $kb
« آخرین ویرایش: 25 بهمن 1394، 08:01 ب‌ظ توسط محمد فدوی »
اگر به بهداشت و فرهنگ رفتار با حیوانات علاقه دارید، از vetMD.ir دیدن کنید.
وبلاگ شخصی من: http://fadavi.net

آفلاین 藤沼

  • Sr. Member
  • *
  • ارسال: 414
  • جنسیت : پسر
اگر توضیحی که دادم رو می‌خوندید متوجه می‌شدید که درصورت تعویض کیبورد با استفاده از دوتا طرح‌بندی همیشه اولین طرح‌بندی برمی‌گرده (قاعدتاً us) بنابراین ربطی به دستور if نداره (: ضمناً من راه‌حلی که ارایه کردم رو قبلاً آزمایش کردم و به‌خوبی کار می‌کنه.

« آخرین ویرایش: 25 بهمن 1394، 09:02 ب‌ظ توسط b|ackwolf »

آفلاین بهروز رمضانی

  • High Hero Member
  • *
  • ارسال: 1111
  • جنسیت : پسر
  • Kakashi Hatake
    • ابونتو نیوز
برای چک کردن زبان فعلی صفحه‌کلید دستور اشتباهی رو توی if چک کردید.. حداقل برای من که همیشه us رو نمایش می‌ده (حتی اگه روی فارسی باشه).
در واقع راه بدون ایرادی وجود نداره ولی اگه به جاش دستور زیر رو بررسی کنید برای وقتی که فقط دوتا زبان رو استفاده می‌کنید مشکلی پیش نمی‌آد:
کد: (bash) [انتخاب]
$ xset -q|grep LED| awk '{ print $10 }'برای من وقتی که زبان فارسی باشه خروجی 0000106 و وقتی زبان انگلیسی باشه خروجی 00000002 هست احتمالا توی سیستم شما هم همین خروجی‌ها باشن.

اگه مایل بودید می‌تونید از این اسکریپت ساده هم استفاده کنید:
کد: (active-layout.sh) [انتخاب]
#!/bin/bash

case `xset -q|grep LED| awk '{ print $10 }'` in
    "00000002") kb='English' ;;
    "00001006") kb='Persian' ;;
    *) kb='Unknown' ;;
esac

echo $kb
ممنون این اسکریپت دقیقا همون کاری را که من نیاز داشتم انجام میده. اما مشکل اینکه باید این اسکریپت همیشه در حال اجرا باشه تا بتونه زبان جاری سیستم را نشون بده.اصولا فکر کنم راه معقولی برای این کار وجود نداشته باشه. احتمالا باید قید اون را بزنم. شایدم قید i3 را ...
در یادگیری و استفاده از خط فرمان کوشا باشید چرا که رستگاری شما در آن است.

آفلاین بهروز رمضانی

  • High Hero Member
  • *
  • ارسال: 1111
  • جنسیت : پسر
  • Kakashi Hatake
    • ابونتو نیوز
ممنون از همه دوستان که کمک کردن این مشکل حل بشه. برای دوستانی که دنبال راه حل هستن برای همچین مشکلی
اول یه این اسکریپت را یه جا ذخیره کنید.من داخل این ادرس ذخیره کردم. اسم اسکریپت i3-extender بگذارید.
/home/behrooz/.i3
#!/usr/bin/env python
"""Extend i3status with more stuff.
Each extra module is a function that returns a dictionary with keys 'name' and
'full_text', decorated with `@i3status_module`.
Usage:
    i3status | i3status-extender
"""

import json
import os
import re
import sys


extra_modules = []


def main():
    while True:
        line = sys.stdin.readline()
        m = re.search(r"^(,?)(\[.+\])", line)
        if m:
            modules = json.loads(m.group(2))
            for old_module_name, new_module in extra_modules:
                modules.insert(position(old_module_name, modules), new_module())
            sys.stdout.write("%s%s\n" % (m.group(1), json.dumps(modules)))
        else:
            sys.stdout.write(line)
        sys.stdout.flush()


def position(old_module_name, all_modules):
    return next(
        i + 1 for i, f in enumerate(all_modules)
        if f["name"] == old_module_name) if old_module_name else 0


def i3status_module(after=None):
    def decorator(f):
        extra_modules.append((after, f))
        return f
    return decorator


@i3status_module(after="tztime")
def keyboard_layout():
    return {
        "name": "kblayout",
        "full_text":
            re.search(r"layout:\s+(\w+)", os.popen("setxkbmap -query").read())
            .group(1).upper()}


if __name__ == "__main__":
    main()
حالا در فایل پیکره‌بندی i3 اینطور اضافه کنید.
status_command i3status | ~/.i3/i3-extender
حالا یه اسکریپت دیگه به نام xkblayout.sh ذخیره کنید با این محتویات
#!/usr/bin/env bash
# filename: xkblayout.sh

layout=$(setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}')

if [ "$layout" = us ]; then
    setxkbmap ir
else
    setxkbmap us
fi
حالا موارد زیر را به فایل کانفیگ i3 اضافه کنید. ادرس فایل را مطابق با ادرس فایل خودتان تغییر دهید.
bindcode Shift+64   exec ~/.i3/xkblayout.sh # Shift+Alt
bindcode Mod1+50    exec ~/.i3/xkblayout.sh # Alt+Shift_L
bindcode Mod1+62    exec ~/.i3/xkblayout.sh # Alt+Shift_R
کار تمام شد الان باید بتونید با ترکیب الت+ شیفت زبان را تغییر دهید و ایندیکیتور هم زبان جاری را نمایش خواهد داد.
در یادگیری و استفاده از خط فرمان کوشا باشید چرا که رستگاری شما در آن است.

آفلاین رسول سعیدنژاد

  • High Hero Member
  • *
  • ارسال: 3504
  • جنسیت : پسر
  • علی (ع): زَكَاةُ الْعِلْمِ نَشْرُه
نقل‌قول
اصولا فکر کنم راه معقولی برای این کار وجود نداشته باشه. احتمالا باید قید اون را بزنم. شایدم قید i3 را ...
برای من یه یه چیزی سواله. اینکه آرچ چرا ابزاری مثل dpkg-reconfigure نداره؟ توی دبیان بیس ها کافیه زبان اینجوری ست بشه:
sudo dpkg-reconfigure keyboard-configurationیا گذاشتن محتویات زیر توی فایل etc/default/keyboard/:
XKBMODEL="pc105"
XKBLAYOUT="us,ir"
XKBVARIANT=",pes_keypad"
XKBOPTIONS="grp:alt_shift_toggle,lv3:ralt_alt,grp_led:scroll"

BACKSPACE="guess"
و بعد از کانفیگ و یک ریبوت، زبان مورد نظر با شورتکات دلخواه جا به جا میشه. برای اتوماتیک کردنش برای هر پنجره هم یه kbdd میزنیم تنگش راه می افته.
نرم افزار، یک ابزاره. برای رسیدن به هدف ازش استفاده کنید. نرم افزار هدف شما نیست :) - آزادی، بزرگ‌ترین دروغ بشریت

آفلاین 藤沼

  • Sr. Member
  • *
  • ارسال: 414
  • جنسیت : پسر
و بعد از کانفیگ و یک ریبوت، زبان مورد نظر با شورتکات دلخواه جا به جا میشه. برای اتوماتیک کردنش برای هر پنجره هم یه kbdd میزنیم تنگش راه می افته.
اینجا مگه مسئله تنظیم کردن یا جابه‌جا شدن بین زبان‌هاست؟

آفلاین رسول سعیدنژاد

  • High Hero Member
  • *
  • ارسال: 3504
  • جنسیت : پسر
  • علی (ع): زَكَاةُ الْعِلْمِ نَشْرُه
سوال من یه چیز دیگه بود  :)
نرم افزار، یک ابزاره. برای رسیدن به هدف ازش استفاده کنید. نرم افزار هدف شما نیست :) - آزادی، بزرگ‌ترین دروغ بشریت