Перекрестная установка программ для совместного использования их между Windows и Ubuntu

Компьютер, который я настраиваю, имеет три раздела, один для Windows 10, один для Linux, и один для файлов и программ, совместно использованных ими. Существует ли способ установить программы на третьем разделе (как Python, PyCharm, MATLAB, и т.д.) для работы над обоими OSs, или я должен установить на каждой ОС их собственную версию Python, C++, и т.д.? Третий раздел ограничен совместно использованием файлов, или это может использоваться для совместного использования IDE, приложений, компиляторов и интерпретаторов?

5
задан 24 August 2019 в 00:05

3 ответа

Вы не собираетесь быть способными установить программы в третьем разделе, таким образом, они могут работать на обоих Ose. Существует причина, почему у Вас должны быть различные загрузки в зависимости от Вашей ОС, каждая ОС имеет много различных требований для программного обеспечения.

Необходимо смочь установить его нас так, чтобы лицензии были совместно использованы, если Вам нужны они, и Вы можете настраивать его так, чтобы файлы, которые производятся, были совместно использованы автоматически, и возможно даже установка IDE, но сами программы должны будут быть установлены в каждой системе.

Одно обходное решение могло бы быть должно настроить передачу x11 от одной ОС до другой, но это потребует, чтобы у Вас были оба Ose, работающие одновременно, который был бы вполне janky.

Поскольку примечание стороны, если бы у Вас было 2 раздела с Ubuntu вместо Ubuntu и Windows это, вероятно, было бы возможно.

4
ответ дан 23 November 2019 в 09:11

Можно сделать это для Bash Ubuntu в Windows

Вот моя установка раздела:

$ lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL
NAME        FSTYPE LABEL            MOUNTPOINT   SIZE MODEL
sda                                            931.5G HGST HTS721010A9
├─sda4      ntfs   WINRETOOLS                    450M 
├─sda2                                           128M 
├─sda5      ntfs   Image                        11.4G 
├─sda3      ntfs   HGST_Win10       /mnt/d       919G 
└─sda1      vfat   ESP                           500M 
nvme0n1                                          477G Samsung SSD 960 PRO 512GB           
├─nvme0n1p5 ext4   NVMe_Ubuntu_16.0 /           44.6G 
├─nvme0n1p3                                       16M 
├─nvme0n1p1 ntfs                                 450M 
├─nvme0n1p6 swap   Linux Swap       [SWAP]       7.9G 
├─nvme0n1p4 ntfs   NVMe_Win10       /mnt/c     414.9G 
├─nvme0n1p2 vfat                    /boot/efi     99M 
└─nvme0n1p7 ntfs   Shared_WSL+Linux /mnt/e         9G 

nvme0n1p7 совместно используется Windows и Ubuntu

Я устанавливаю раздел на 9 ГБ, который оба WSL (Windows Subsystem для Linux) и Ubuntu могут иметь в их путях и запустить программы. Вот дерево для него:

$ sudo tree /mnt/e -d 
/mnt/e
├── bin
├── boot
│  └── grub
│  ├── fonts
│  ├── i386-pc
│  └── locale
├── Desktop
├── Documents
├── Downloads
│  └── WinScreeny-master
├── etc
│  ├── apt
│  │  ├── sources.list.d
│  │  └── trusted.gpg.d
│  ├── cron.d
│  │  └── test-directory
│  ├── cron.daily
│  ├── cron.hourly
│  ├── cron.monthly
│  ├── cron.weekly
│  ├── default
│  ├── ssmtp
│  └── systemd
│  ├── network
│  ├── system
│  │  ├── bluetooth.target.wants
│  │  ├── default.target.wants
│  │  ├── display-manager.service.wants
│  │  ├── final.target.wants
│  │  ├── getty.target.wants
│  │  ├── graphical.target.wants
│  │  ├── hibernate.target.wants
│  │  ├── hybrid-sleep.target.wants
│  │  ├── multi-user.target.wants
│  │  ├── network-online.target.wants
│  │  ├── paths.target.wants
│  │  ├── printer.target.wants
│  │  ├── sleep.target.wants
│  │  ├── sockets.target.wants
│  │  ├── suspend.target.wants
│  │  ├── sysinit.target.wants
│  │  └── timers.target.wants
│  └── user
├── lib
│  └── systemd
│  └── system-sleep
├── $RECYCLE.BIN
│  └── S-1-5-21-1568003092-1971238075-3041751339-1001
├── System Volume Information
├── Temporary Work
├── usr
│  ├── local
│  │  └── bin
│  │  ├── bell
│  │  │  └── sounds
│  │  ├── startup-scripts
│  │  └── zap
│  │  └── Assembly-Intro-hello
│  │  ├── BeOS
│  │  ├── FreeBSD
│  │  └── Linux
│  └── share
│  └── plymouth
│  └── themes
│  ├── details
│  ├── earth-sunrise
│  ├── text
│  ├── tribar
│  ├── ubuntu-logo
│  └── ubuntu-text
└── wsl-linux-tmp

71 directories

Создание гибридной программы

Я взял одну из своих программ удара: Приложение, которое заблокирует экран после количества времени набора для Ubuntu и изменило его для распознавания при выполнении в соответствии с Windows 10 и проблемой powershell команды вместо Ubuntu управляют для пузырей сообщения и системных звуков.

Например, вот фрагмент кода для проверки, если среда является Windows и использованием другой команды, чем в Ubuntu:

if [[ $WSL_running == true ]]; then  
    powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();'
else
    ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ;
fi

Вот полный код удара после того, как заявка была подана Windows / гибрид Ubuntu:

$ cat /mnt/e/bin/lock-screen-timer
#!/bin/bash

# NAME: lock-screen-timer
# PATH: $HOME/bin
# DESC: Lock screen in x minutes
# CALL: Place on Desktop or call from Terminal with "lock-screen-timer 99"
# DATE: Created Nov 19, 2016. Last revision Nov 12, 2017.
# UPDT: Updated to support WSL (Windows Subsystem for Linux)

# NOTE: Time defaults to 30 minutes.
#       If previous version is sleeping it is killed.
#       Zenity is used to pop up entry box to get number of minutes.
#       If zenity is closed with X or Cancel, no screen lock timer is launched.
#       Pending lock warning displayed on-screen at set intervals.
#       Write time remaining to ~/.lock-screen-timer-remaining

MINUTES="$1" # Optional parameter 1 when invoked from terminal.

# if no parameters set default MINUTES to 30
if [ $# == 0 ]; then
    MINUTES=30
fi

DEFAULT="$MINUTES" # When looping, minutes count down to zero. Save deafult for subsequent timers.

# Check if lock screen timer already running
pID=$(pgrep -f "${0##*/}") # All PIDs matching lock-screen-timer name
PREVIOUS=$(echo "$pID" | grep -v ^"$$") # Strip out this running copy ($$$)
if [ "$PREVIOUS" != "" ]; then
    kill "$PREVIOUS"
    rm ~/.lock-screen-timer-remaining
    zenity --info --title="Lock screen timer already running" --text="Previous lock screen timer has been terminated."
fi

# Running under WSL (Windows Subsystem for Linux)?
if cat /proc/version | grep Microsoft; then
    WSL_running=true
else
    WSL_running=false
fi


while true ; do # loop until cancel

    # Get number of minutes until lock from user
    MINUTES=$(zenity --entry --title="Lock screen timer" --text="Set number of minutes until lock" --entry-text="$DEFAULT")

    RESULT=$? # Zenity return code
    if [ $RESULT != 0 ]; then
        break ; # break out of timer lock screen loop and end this script.
    fi

    DEFAULT="$MINUTES" # Save deafult for subsequent timers.
    if [[ $MINUTES == 0 ]] || [[ $MINUTES == "" ]]; then
        break ; # zero minutes considered cancel.
    fi

    # Loop for X minutes, testing each minute for alert message.
    (( ++MINUTES )) 
    while (( --MINUTES > 0 )); do
        case $MINUTES in 1|2|3|5|10|15|30|45|60|120|480|960|1920)
            notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "Locking screen in ""$MINUTES"" minute(s)." ;
            if [[ $WSL_running == true ]]; then  
                powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();'
            else
               ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ;
            fi
           ;;
        esac;

        # Record number of minutes remaining to file other processes can read.
        echo "$MINUTES Minutes" > ~/.lock-screen-timer-remaining

        sleep 60

    done

    rm ~/.lock-screen-timer-remaining # Remove work file others can see our progress with

    if [[ $WSL_running == true ]]; then  
        # Call lock screen for Windows 10
        rundll32.exe user32.dll,LockWorkStation
    else
        # Call screen saver lock for Ubuntu versions > 14.04.
        dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    fi

    # Reset sound to Laptop or HDMI TV - Uncomment to fix sound device changing
    #    sleep 5 # HDMI deactivates when screen turned off. Give 5 seconds for TV to resync screen.
    #    hotplugtv

done # End of while loop getting minutes to next lock screen

exit 0 # Closed dialog box or "Cancel" selected.
1
ответ дан 23 November 2019 в 09:11

Почти для всех программ, нет. Это происходит из-за Windows и Linux, имеющего другой API (Интерфейс прикладного программирования) вызовы и системные вызовы. API является функциями и определяет, как программы общаются друг с другом. Как правило, они включены в библиотеки или могут быть частью операционной системы. Системные вызовы определяют, как программы запрашивают поддержку оборудования / действие от ядра. Возможно перевести вызовы API и системные вызовы одной операционной системы в другого, но это требует огромного усилия. ВИНО является на самом деле главным примером перевода Windows APIs в POSIX (например, Linux). Это создает слой совместимости между Windows и Linux, позволяя некоторому программному обеспечению Windows работать на Linux. Кроме того, Windows и Linux имеют различные двоичные форматы исполняемых файлов. Windows имеет формат Портативного исполняемого файла (PE), и Linux имеет ELF (Исполняемый Связываемый Формат).

Все это сказало, я не думаю, чего Вы пытаетесь достигнуть, возможно без значительного усилия. Возможно (большой, возможно) Вы могли установить ВИНО и настроить его на Вашем общем разделе так, чтобы оно могло содержать программы и для Windows и для Linux. Но это - дикая теория. Что поддерживающий пользователь Jeff сказал относительно лицензий, и другие файлы, более вероятно, будет возможно и намного легче выполнить.

1
ответ дан 23 November 2019 в 09:11

Другие вопросы по тегам:

Похожие вопросы: