web-dev-qa-db-fra.com

Programmes croisés pour les partager entre Windows et Ubuntu

L'ordinateur que je configure possède trois partitions, une pour Windows 10, une pour Linux et une pour les fichiers et les programmes partagés entre elles. Existe-t-il un moyen d'installer des programmes sur la troisième partition (tels que Python, PyCharm, MATLAB, etc.) afin qu'ils fonctionnent sur les deux systèmes d'exploitation ou dois-je installer sur chaque système d'exploitation leur propre version de Python, C++, etc.? La troisième partition est-elle limitée au partage de fichiers ou peut-elle être utilisée pour partager des IDE, des applications, des compilateurs et des interprètes?

5
Ben Rei

Vous ne pourrez pas installer de programmes dans la troisième partition pour pouvoir les exécuter sur les deux systèmes d'exploitation. Il y a une raison pour laquelle vous avez besoin de téléchargements différents en fonction de votre système d'exploitation. Chaque système d'exploitation a de nombreuses exigences en matière de logiciel.

Vous devriez pouvoir le configurer pour que les licences soient partagées, si vous en avez besoin, et vous pourrez peut-être le configurer de manière à ce que les fichiers produits soient partagés automatiquement, et peut-être même IDE les programmes eux-mêmes devront être installés dans chaque système.

Une solution de contournement pourrait consister à configurer la transmission x11 d’un système d’exploitation à l’autre, mais cela nécessiterait que les deux systèmes d’exploitation fonctionnent en même temps, ce qui est assez banal.

Remarque: si vous aviez 2 partitions avec Ubuntu au lieu d'Ubuntu et Windows, cela serait probablement possible.

4
Jeff

Pour presque tous les programmes, non. Cela est dû au fait que Windows et Linux ont des appels API et des appels système différents (API). Les API sont des fonctions et définissent la manière dont les programmes communiquent entre eux. En règle générale, ils sont inclus dans des bibliothèques ou peuvent faire partie du système d'exploitation. Les appels système définissent la manière dont les programmes demandent au support/activité matérielle du noyau. Il est possible de convertir des appels d'API et des appels système d'un système d'exploitation en un autre, mais cela nécessite un effort considérable. WINE est en fait un excellent exemple de la traduction des API Windows en POSIX (par exemple, Linux). Cela crée une couche de compatibilité entre Windows et Linux, permettant à certains logiciels Windows de s'exécuter sous Linux. De plus, Windows et Linux ont différents formats exécutables binaires. Windows possède le format Portable Executable (PE) et Linux le format ELF (Executable Linkable Format).

Tout cela étant dit, je ne pense pas que ce que vous essayez de réaliser soit possible sans un effort significatif. Peut-être (gros peut-être) pourriez-vous installer WINE et le configurer sur votre partition partagée afin qu'il puisse contenir des programmes pour Windows et Linux. Mais c'est une théorie sauvage. Ce que Jeff a dit à propos des licences et d’autres fichiers est probablement plus facile à réaliser.

1
ElderFuthark

Vous pouvez le faire pour Ubuntu Bash sous Windows

Voici la configuration de ma partition:

$ 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 est partagé entre Windows et Ubuntu

J'ai configuré une partition de 9 Go que WSL (sous-système Windows pour Linux) et Ubuntu peuvent avoir dans leur chemin et exécuté des programmes. Voici l'arbre pour cela:

$ 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

Faire un programme hybride

J'ai pris un de mes programmes bash: Application qui verrouille l'écran après un laps de temps défini pour Ubunt et l'a modifié pour le reconnaître lors de son exécution sous Windows 10 et émettre des commandes powershell à la place de Ubuntu. commandes pour les bulles de message et les sons du système.

Par exemple, voici un extrait de code permettant de vérifier si l'environnement est Windows et en utilisant une commande différente de celle utilisée dans 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

Voici le code bash complet une fois l’application hybride Windows/Ubuntu créée:

$ 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 Unbuntu 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
WinEunuuchs2Unix